2013-01-15 47 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