2013-01-15 2 views
5

Я хотел спросить, почему я получаю эту ошибку при инициализации списка, например, векторов или какого-либо другого типа и как его исправить?Ошибка в `* tmp *` [[k]]: индекс за пределами в R

> l <- list() 
> l[[1]][1] <- 1 
Error in `*tmp*`[[1]] : subscript out of bounds 

Это весь код мне нужно, на самом деле я хочу, список векторов, как это:

mcorrelation <- list() 
for(k in 1:7){ 
    for (ind in 1:7){ 
     mcorrelation[[k]][ind] <- co$estimate 
    } 
} 

Должен ли я инициализировать весь список заранее или есть другой способ не получать эта ошибка?

ответ

4

С l еще не имеет вектора, вы не хотите указывать позицию в первом элементе списка. Попробуйте:

l <- list() 
l[[1]] <- 1 

Для добавления дополнительных значений в определенные места в этом новом векторе, то лучше всего установить вектор с известной длиной значений, которые будут поданы в (по соображениям скорости, понять, почему here). Вот пример цикла:

n <- 100 
l <- list() 
l[[1]] <- NaN*seq(n) 
for(i in seq(n)){ 
    l[[1]][i] <- i 
} 

Что касается вашего конкретного примера:

k <- 7 
ind <- 7 
mcorrelation <- vector(mode="list", k) 
for(i in seq(k)){ 
    mcorrelation[[i]] <- NaN*seq(ind) 
    for (j in seq(ind)){ 
     mcorrelation[[i]][j] <- rnorm(1) 
    } 
} 
mcorrelation 
+0

Я хочу иметь список длинный векторы, которые инициализируются в цикле for. Итак, следующие шаги: l [[1]] [2] <- X, ... и затем l [[2]] [1] <- 1, ... – hora

+0

Большое спасибо за редактирование. – hora

2

экран «[» функция позволяет использовать несколько заданий без петель:

> y <- NULL 
> y 
NULL 
> y[cbind(1:2, 1:2)] <- list(list(1,2), list(2,3)) 
> y 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 2 


[[2]] 
[[2]][[1]] 
[1] 2 

[[2]][[2]] 
[1] 3 
Смежные вопросы