Я хочу использовать список в коде цикла.list [[i]] работает нормально, но почему не работает res <- vector ("list", n)? - PullRequest
0 голосов
/ 09 июня 2018

Я использую for loop для просмотра двух разных матриц.Код выглядит так:

x <- matrix(rnorm(1806),7,258)
x2 <- matrix(rnorm(1032),4,258)

samp_size <- 3
iter <- 1000
subs <- matrix(sample(1:nrow(x), samp_size*iter, replace=T),
               ncol=samp_size, byrow=T)
subs2 <- matrix(sample(1:nrow(x2), samp_size*iter, replace=T),
                ncol=samp_size, byrow=T)

for(j in 1:nrow(subs)){
  ad <- x[subs[j,],]
  ad1 <- x2[subs2[j,],]
  rd <- rbind(ad,ad1)
  dis <- dist(rd, method="euclidian")
  #CV <- sd(unlist(rd), na.rm=TRUE)/mean(unlist(rd), na.rm=TRUE)*100
  dis2 <- dis[dis!=0]
  list[[j]] <- mean(dis2)
  l <- unlist(list)
  l <- na.omit(l)
  sdis <- dist(ad, method="euclidian")
  sdis2 <- sdis[sdis!=0]
  res <- vector("list", 1000)
  res[[j]] <- mean(sdis2)
  l2 <- unlist(res)
  l2 <- na.omit(l2)
}

list[[j]] работает просто отлично.

Результат каждой итерации добавляется в него как элемент списка на основе значения j.

Однако, res[[j]] заканчивается заполнением NULL только последним элементом, содержащим значение.

Я не уверен, что здесь происходит.Я бы хотел, чтобы res[[j]] вел себя так же, как list[[j]].

Помощь очень ценится.

1 Ответ

0 голосов
/ 09 июня 2018

Возможно инициализировать res:

# before the loop
res <- rep(list(NA),nrow(subs))
# or in the loop
res <- rep(list(NA),1000) 
# or 
res <- list(numeric(1000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...