2016-10-28 14 views
-2

私はRが新しく、ループのインデックスが変数名に追加されるforループ内のベクトルを参照する変数を作成しようとしています。しかし、以下のコードでは、新しいベクトルを大きなデータフレームの適切な場所に挿入しようとしていますが、動作していません。また、get()、as.vector()、eval )等をデータフレーム構築関数に格納する。Rのベクトルに変数名を動的に割り当てますか?

num_incorrect.8とnum_incorrect.9を値0のベクトルにしてからmytableに挿入します。私は列の挿入を行ったかを見てみると

cols_to_update <- c(8,9) 

for (i in cols_to_update) 
{ 
#column name of insertion point 
insertion_point <- paste("num_correct",".",i,sep="") 
#create the num_incorrect col -- as a vector of 0s 
assign(paste("num_incorrect",".",i,sep=""), c(0)) 

#index of insertion point 
thespot <- which(names(mytable)==insertion_point) 
#insert the num_incorrect vector and rebuild mytable 
mytable <- data.frame(mytable[1:thespot], as.vector(paste("num_incorrect",".",i,sep="")), mytable[(thespot+1):ncol(mytable)]) 
#update values 
mytable[paste("num_incorrect",".",i,sep="")] <- mytable[paste("num_tries",".",i,sep="")] - mytable[paste("num_correct",".",i,sep="")] 
} 

、それは次のようになります。それはリテラルテキストとして私の命令を取っているよう

[626] "num_correct.8"           
[627] "as.vector.paste..num_incorrect........i..sep........2" 
... 
[734] "num_correct.9"           
[735] "as.vector.paste..num_incorrect........i..sep........3" 

基本的には、それが見えます。コードの最後の行が(行以来、それは適切な場所に列を挿入していない前に)期待どおりに動作し、データフレームの最後に新しい列を作成します。

[1224] "num_incorrect.8"          
[1225] "num_incorrect.9" 

私は外の一種の午前アイデアなので、誰かが私に何が間違っているのか説明してください、なぜそれを修正するのか、私はそれを感謝します。ありがとう!

+0

私はあなたを正しく理解しているかどうかわかりません。あなたの 'mytable'を表す小さな再現可能な例を共有できますか? –

答えて

0

間違いは、コードを作成してデータフレームに追加するコメントを除いて、コードの最後の2行目です。

ベクトルを追加して名前を更新するだけで済みます。変数に0の値を代入するだけでなく、ベクトルを作成しないので、assign関数を削除することができます。

コードの2番目の最後の行の代わりに、以下のコードを入力してください。

#insert the vector at the desired location 
mytable <- data.frame(mytable[1:thespot], newCol = vector(mode='numeric',length = nrow(mytable)), mytable[(thespot+1):ncol(mytable)]) 

#update the name of new location 
names(mytable)[thespot + 1] = paste("num_incorrect",".",i,sep="") 
+0

ありがとうございました。あなたの提案はうまくいった。しかし、これを代わりにしたい場合: ベクトル(モード= '数値'、長さ= nrow(mytable))) の割り当て(貼り付け精度( "精度"、 "i"、sep = ""))どのように私は元の質問でやろうとしていたようにベクトルを参照し、data.frame()関数を使用して挿入することができますか?それともそれはできないのですか? –

関連する問題