2017-09-16 7 views
0

bigDaddyの寸法はnrow=20, ncol=1000です。今私は100回の反復を実行するループをforとし、各反復で10列のスライスとすべての行をbigDaddyにしたいと考えています。例えば最初の反復では、すべての行と列1-10、2番目の反復ではすべての行と列11-20などがあります。R - forループの行列をR列でスライスする

は、ここで私がしようとしているコードです:

for(i in seq(from=1, to 991, by=10)) 
{ 
    smallChild <- bigDaddy[,i:i+9] 
} 

が、最初の繰り返しで私を与えるものだsmallChild行列bigDaddyの10番目の列から作成された20の長さのベクトルです。私がsmallChild <- bigDaddy[,1:10]のようなコードのiの値をハードコードすると、予想される行列が得られます。

誰かが正しい方向を指すことができますか?

+4

あなたは括弧 'i:(i + 9)'がありません。また、値を「SmallChild」に繰り返し再割り当てしています。ループが終了すると、最後の反復だけが終了します。 –

+0

Ruiさん、ありがとうございます。非Rのプログラミングの背景から来て、私はRが今絶望していると感じます。 –

答えて

1

assignを使用して、各SmallChildを別の名前で保存することができます。 SmallChild1、SmallChild11など

for(i in seq(from=1, to 991, by=10)) 
{ 
    temp <- bigDaddy[,i:(i+9)] 
    assign(paste0(SmallChild, i), temp) 
} 
0

多くの独立した(同様に構造化された)とは対照的に、オブジェクトのオブジェクトのリストを保存するためにlapplyの使用を検討してください:

data_list <- setNames(data_list, paste0("SmallChild_", seq(length(data_list)))) 

data_list$SmallChild_1 
data_list$SmallChild_2 
data_list$SmallChild_3 
... 

data_list <- lapply(seq(from=1, to=991, by=10), function(i) bigDaddy[,i:(i+9)]) 

でも項目名を与えます

実際に別のオブジェクトをlist2envというオブジェクトの名前付きリストで実行する場合:

list2env(data_list, .GlobalEnv)