`* tmp *`[[k]]中的错误:下标超出R的范围

时间:2013-01-15 08:12:54

标签: r subscript

我想问一下为什么在初始化例如矢量或其他类型的列表时出现此错误,我该如何解决?

> 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
    }
}

我应该提前初始化整个列表,还是有其他方法可以解决此错误?

2 个答案:

答案 0 :(得分:5)

由于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 

答案 1 :(得分: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