2016-09-17 21 views
-2

3つのループを持つRコードを作成して多数の行列を作成しています。これらの行列をすべて格納したいと考えています。タスクは、200の大きな行列ごとに、左から右へ、上から下へ、毎回10×10のサブ行列を取ることです。これらのサイズ(200 * 790 * 790)の行列(10 * 10)はすべて私が望むものです。以下は私がすでに行っていることです:リスト内の "Multi-"インデックス要素

# Define an empty list to store all submatrices 
sub.matrix = list() 

# for loop to generate and store all submatrices 
for(i in 1:200){ 
    for(j in 1:790){ 
    for(k in 1:790){ 
     sub.matrix[[i]][[j]][[k]] = main.matrix[[i]][j:(j+10), k:(k+10)] # QUESTION STARTS AT THE BEGINNING OF THIS LINE. 
    } 
    } 
} 

したがって、私が効果的にsub.matrixのインデックスを作成する方法です。私はそれが "[[i]は] [[J]] [[K]" 上記のようにする必要がありますけれども、しかし、コンピュータは

エラー*tmp* [[J]]で私にエラーを告げ:外の添字境界。

この問題を解決するにはどうすればよいですか、またはこのようなリストでマトリックスのインデックスを「マルチ」する方法はありますか?

ありがとうございます。あなたは、インデックス、それことができる前に初期化する

+0

'main.matrix'はどこで定義されますか? –

+0

@ Hack-R私のラップトップから読み取られた複数のマトリックスです。 – user132565

+0

私はStackOverflowのRタグで、再現可能な*例が必要であることを意味しています... –

答えて

0

あなたsub.matrixニーズ:xの

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

がエラー[[1]]:あなたがしようとすると、添字が範囲

外のエラーが発生しました空リストを索引付けするには、代わりに次のようにしてください(コンピュータにオブジェクトを格納するのに十分なメモリがあるとは思われません)。

sub.matrix = vector(mode = "list", length = 200) 
for(i in 1:200){ 
    sub.matrix[[i]] = vector(mode = "list", length = 790) 
    for(j in 1:790){ 
     sub.matrix[[i]][[j]] = vector(mode = "list", length = 790) 
     for(k in 1:790){ 
      sub.matrix[[i]][[j]][[k]] = main.matrix[[i]][j:(j+10), k:(k+10)] 
     } 
    } 
} 
+0

あなたのソリューションに感謝し、私はこれを試してみます。どうもありがとう! – user132565

+0

hmm ...行列の数が大きすぎるので、私はコードを実行した後、約15分後にRがちょうど致命的なエラーのために終了するためですか? : – user132565

+0

おそらく、おそらく間違っているかもしれませんが、あなたのデータは約600GBのメモリが必要です。小さなデータセットを試してみてください。 – Psidom

関連する問題