2012-03-13 4 views
1

ループ内で作成されたデータを、順次番号の付いた一連の変数に割り当てたいと思います。書かれているように、この例のループは単にそれぞれの時間を上書きするので、すべてが行列ストーグに割り当てられた最終データセットに格納されます。私がしたいのは、それぞれの反復に "somename(counter)"という新しい変数を作成し、その変数に行列ストーグの現在の値を格納することです。下のループでは、値0,0,0,0、somename1、値1:4、somename2、値2,4,6,8の変数somename0を作成する必要があります。私はループ内で変数を動的に作成するのが、変数の命名を自動化するために、そして作成される変数の数を自動化するのが最も良いと思います。シーケンシャルに名前を付ける変数(初心者)

例:

no_its <- 3 
counter <- 0 
while(counter < no_its){ 
    a <- c(counter*(1:4)) 
    stooges <- as.matrix(a) 
    rownames(stooges)<-c("Larry","Moe","Curly","Shemp") 
    counter <- counter+1 
} 
stooges 

output: 
     [,1] 
Larry 2 
Moe  4 
Curly 6 
Shemp 8 
+1

名前付き変数を使用する理由は、行列やデータフレーム、リスト、またはデータ構造このタスクにはるかに適していますか? – Dason

+3

これを行うRの方法は、各繰り返しをリストの新しい要素としてループに保存することです。リストを体系的に反復するのは簡単です。 –

+0

http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f –

答えて

2

は、リストを使用してみてください、それは常にあなたが行列をしたい場合は、それを取り込み、その後、空の行列を作成し、R

counter <- 0:2 
names(counter) <- paste("somename",seq_along(counter)-1,sep="") 
(result <- lapply(counter, function(counter) counter*1:4)) 
result[["somename1"]] 
## only if you must 
attach(result, pos=2) 
ls(pos=2) 
+0

わかりました。状況はよく。私の実際のコードは、上で説明した単純な例よりはるかに複雑です。私の入力データは、サンプルを列挙するタクシーと列の名前を列挙するrownamesの行列です。ループを反復することにより、入力martixのランダム(または確率加重)サブサンプルが作成され、一定数の列を持つ行列が生成されますが、変数(および未知数)の行が生成されます。後で使用するためにそれらを参照できるように、各出力マトリックスに名前を割り当てる必要があります。 –

+0

'lapply'によって呼び出された関数の複雑さに関わらず、同じ考え方を適用する必要があります。それはそれの美しさです。 – baptiste

+0

ありがとうございました。ちょっと微調整すれば、あなたのコードが仕事をします。アマチュアの質問に対する謝罪。 –

0

でより良い選択を証明します:

stooges <- matrix(NA, ncol=4, nrow=4) 
row.names(stooges)<-c("Larry","Moe","Curly","Shemp") 
stooges[1:4, 1:4] <- col(stooges) * 1:4 
stooges 
#--------- 
     [,1] [,2] [,3] [,4] 
Larry 1 2 3 4 
Moe  2 4 6 8 
Curly 3 6 9 12 
Shemp 4 8 12 16 
関連する問題