2016-10-20 5 views
3

R(またはまったく)でプログラミングするのが初めてで、数日間問題を抱えています。この質問が何らかの形ですでに存在している場合は申し訳ありませんが、私は何かを見つけることができます。サブセットRの割り当て機能付きデータ

私は、pop1、pop2、pop3などと呼ばれる複数のデータセットを持っています。私はforループ内から指定されたサブセットに値0を割り当てようとしています。

subset(get(paste("pop", 1, sep = "")), ind == 46, select = -ind) 

私が探しているサブセットを返しますが、私がしようとすると::試行錯誤の末、私はコードが検出されませんでした

for (i in 1:3) { 
    assign(subset(get(paste("pop", i, sep = "")), ind == 46, select = -ind), 0) 
} 

は、私は、エラーメッセージが表示されます

#Error in assign(subset(get(paste("pop", i, sep = "")), ind == 46, select = -ind), : 
    #invalid first argument 

assign関数は、次のいずれも機能しないため、サブセットを最初の引数として受け取らないようです。

assign(pop1[46, -1], 0) 
assign(pop1$trait1, 0) 
assign(subset(pop1, ind == 46), 0) 

私はこの作業を行う方法はありますか?おかげさまで、もっと情報が役立つかどうか教えてください。

+2

すべてのポップをリストオブジェクトに入れ、lapplyを使用して「割り当てを取得」の問題を回避します。 – zx8754

+1

コマンド文字列を作成し、 'eval(parse(text = yourtext)) 'を使うのが一つのトリックです。 '%s [%d、%d] < - 0"、 "a"、1,1)) '' a ' - マトリックス(1:6,3,2) ) '。スマートフォンにRコードを入力するのは難しいです。 – chan1142

答えて

2

コメントで述べたように、リストを介してこれらの種類のタスクを実行する方が簡単です。

リストにすべてのデータセットを保存することができます。その後、通常のサブ設定を使用して、定期的な割り当てを行うことができます。

df1=data.frame(a=1:10,b=c(1,2)) 
df2=data.frame(a=1:10,b=c(1,2)) 
l=list(df1,df2) 
lapply(l, function(x) { x[which(x[,2]==1),2]=999; return(x)}) 

これをループで実行したい場合は、evalとともに解析することができます。

for(i in 1:2){ 
    txt=paste('df',i,'[df',i,'[,2]==1,2]','=999', sep = "") 
    eval(parse(text = txt)) 
} 
+0

ありがとう!私は、ループの中で働くことができなかったforループの中で、他にもたくさんのことが起こっていたので、私は必要なもののために働くことができませんでした(私はこれは不可能だと言っているわけではありませんが、できませんでしたが)、私はデータをサブセット化する関数を作成することで、私の本来の目的のために作業するコードを手に入れました。 –

+0

私は心配していることを理解していますので、ここではあなたが作業できるforループがあります。 –

関連する問題