7

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

> 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

2 回答 2

6

由于l还没有向量,因此您不想在列表的第一个元素中指定位置。尝试:

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

为了在这个新向量中的特定位置添加附加值,最好使用要归档的值的已知长度设置向量(出于速度原因;请参阅此处的原因)。这是一个示例循环:

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 
于 2013-01-15T08:16:23.917 回答
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
于 2013-01-15T09:14:53.570 回答