2017-04-11 15 views
-2

のためにある機能の一部としてリストに保存されている範囲を使うのですか、私は次のコードを持っている:R:どのように私はループ

x = c(1,2,5,6) 
x = rbind(x,c(4,3,6,5)) 
x = rbind(x,c(3,7,6,5)) 

y = 1:2 
z = 3:4 
variables = list(y,z) 

p = 1 
for(i in variables){ 
    assign(paste("tbl",p,sep="")) = table(x[,i]) 
    p = p + 1 
} 

tbl1 
tbl2 

は、どのように私は1として私を認識するためのループを得るのです。 2と3:4となるので、 "tbl1"と "tbl2"というループから2つのテーブルが返されます。

ありがとうございます!

+0

あなたのコードは、問題を持っている、あなたはX = '1'にリセットされ –

+0

それを確認し、特定の質問を公開の代わりに、「私のコードを修正する」と言ってください、 'table()'は一番上の行列を使いません。 –

+0

@ Nealありがとう、更新しました。 – Ghilborn

答えて

0

予想される出力がわからないので、私はちょうど推測することができます。まず、rbindのベクトルではなく、のベクトルではなく、cbindを意味すると仮定しました。次に、tableオペレーション内のxのインデックスは、列ではなく行に参照されていると想定しました(それ以外の場合、インデックスは範囲外です)。ここで

は、あなたが何ができるかです:

## Your data: 
x <- cbind(c(1,2,5,6), c(4,3,6,5), c(3,7,6,5)) 

## Your indices 
variables <- list(y = 1:2, z = 3:4) 

## Your loop: 
for (i in seq(along = variables)){ 
    assign(paste0("tbl", i), table(x[variables[[i]],])) 
} 

tbl1 
# 
# 1 2 3 4 7 
# 1 1 2 1 1 

tbl2 
# 
# 5 6 
# 3 3