2016-07-13 5 views
0

mergedColorsという色のリストがあります。この色のリストから、for()ループを使用して、それぞれの固有の色に対応する行列を作成します。この時点までは、すべて正常に動作します。ループを作成した後にループ内の行列を変更/編集していきたいと思っています。この例では、3番目の列の名前を変更しようとしています。しかし、私はそれをどうやってやっていくのか全面的にはわかりません。私は、私はそれらを作成するために使用したのと同じ構文を介してそれらを呼び出すしようとすると、for()ループ内で作成されたオブジェクトを呼び出す

colnames(paste("merged",each,sep="_"))[3] = "Temp" 

Rはエラーを返します:「割り当ての対象は、非言語オブジェクトに展開します」。ループの中でまだ作成した行列をどう呼び出すべきですか?

サンプルデータ:

mergedColors = c("red", "blue", "green", "red", "black", "blue", "blue", "green", "yellow", "red") 
table(mergedColors) 



for(each in unique(mergedColors)){ 

    assign(paste("merged",each,sep="_"), as.matrix(cbind(cars, c(each)))) 
    #colnames(paste("merged",each,sep="_"))[3] = "Temp" 

} 
+0

誰かが 'GET'を使用するためにあなたを伝えるために起こっているが、あなたはいけません。あなたは戻って、名前付きリストを使ってすべてをやり直すべきです。 – joran

+0

@joranすでに 'get'を使って答えがあった後で、このコメントをうまくつけました。 –

+0

@ Hack-R私のウェブページは更新が遅くて、見えませんでした。 – joran

答えて

2

あなたはちょうどあなたが貼り付けている事がオブジェクトを参照していることをRに伝えるためにgetを使用する必要があります。このよう

tmp <- get(paste("merged",each,sep="_")) 
colnames(tmp)[3] = "Temp" 

> head(tmp) 
    speed dist Temp  
[1,] " 4" " 2" "yellow" 
[2,] " 4" " 10" "yellow" 
[3,] " 7" " 4" "yellow" 
[4,] " 7" " 22" "yellow" 
[5,] " 8" " 16" "yellow" 
[6,] " 9" " 10" "yellow" 

はここで完全なループです:

for(each in unique(mergedColors)){ 

    assign(paste("merged",each,sep="_"), as.matrix(cbind(cars, c(each)))) 
    #colnames(paste("merged",each,sep="_"))[3] = "Temp" 
    tmp <- get(paste("merged",each,sep="_")) 
    colnames(tmp)[3] = "Temp" 
    assign(paste("merged",each,sep="_"), tmp) 

} 
+0

しかし、それで、あなたは新しいマトリックスを作っていると思います。それはactuelマトリックスの名前を変更しないか、間違っていますか? – Alex

+0

@Alex Rightだから、以前と同じように 'assign'演算を実行するだけで上書きすることができます。私は完全なループを追加してあなたを見せます。 –

+0

またこちらをご覧ください:http://stackoverflow.com/questions/14464442/using-get-with-replacement-functions – Alex

関連する問題