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 に答える