2016-05-18 2 views
0

小さな例です。私は最初のループで 'A1'、 'A2'、...、 'A10'を作成しました。私は別のループで彼らの平均を取得したいですか?私はそれをどうすればいいのですか?R:ループ内の変数の使い方は? A1、A2、A3

d= 5 
for(i in 1:10) 
{ 
    nam <- paste("A", i, sep = "") 
    assign(nam, rnorm(3)+d) 
} 

for(i in 1:10) 
{ 
    nam <- paste("A", i, sep = "") 
    mean(nam) 
} 

namは文字列であるため、上記は機能しません。

おかげで、このお試しください我々はR.で物事を行う方法ではありません PS

+2

多くの変数を作成するのではなく、ベクトル/リストの使い方を調べるべきだと思います。場合によっては、ループは 'a = replicate(10、rnorm(3)+ d)'と 'sapply(a、mean)'のように記述する必要があります。 –

+0

何らかの理由で実際にあなたの例のように何かを行う必要があれば、['get'](https://stat.ethz.ch/R-manual/R-devel/library/base/)を使いたいでしょう。 html/get.html)、すなわち 'get(nam)' – Gabe

答えて

8

vals <- replicate(10,{rnorm(3) + 5},simplify = FALSE) 
vals <- setNames(vals,paste0("A",1:10)) 

lapply(vals,mean) 

をして、これまでの機能assignについて聞いたあなたを忘れ少なくとも当面しよう。

+0

私は 'assign'コメントのために複数のupvoteを与えることができたらいいと思います。私はこれがどこから来るのか分からないが、私はこれをほぼ毎日見ている。多分奇妙なオンラインコース。 – RHertel

+3

私はいつもこの問題に対するアプローチはSASに由来すると考えていました。 SASユーザーにとって問題に近づくのは自然な方法です。だから私の人生のほとんどすべての問題のように、私はSAS上でこれを責めます。 – Dason

+0

@RHertel私は最近、これらの種類の間違いを見るほど、「正しい」方法を理解することが困難になるRとは対照的に、ユーザーに責任を負うことがより難しくなることを、修辞的にコメントしました物事をする。 – joran

関連する問題