0

次のようなプロセスを 10 回繰り返す必要があります。

> random=rnorm(5)  
> total=sum(random)

そして、毎回の合計を final というベクトルに入れます。

ループの場合、次のように書くと思います。

> final <- c(total[[i]])
> for(i in 1:10){  
  random=rnorm(5)  
  total=sum(random)
  ...
}

...合計を最終的なベクトルに入れる方法がわかりませんか? また、オンラインで調べてみると、ほとんどの場所で、適用コードを使用する必要があると言われています。どちらを使用する必要があり、合計を最終に入れるにはどうすればよいですか?

4

1 に答える 1

2

R はreplicateまさにこのユース ケースのために呼び出される関数を提供します。指定した回数だけ操作を繰り返し、結果をベクトルに格納します。

> replicate(10, sum(rnorm(5)))
[1] -0.2286870  1.5123902 -5.8179539  1.2119908 -2.8749987  5.5817021
[7]  2.5427969  2.1833426  0.4884455 -3.6787912

データを生成する関数がより複雑な場合は、replicate を使用して関数を呼び出すか、sapply を直接使用できます。そう

> genRandomData <- function() {
    random <- rnorm(100)
    c(sum(random), var(random))
}
> replicate(10, genRandomData())
         [,1]     [,2]      [,3]      [,4]      [,5]      [,6]       [,7]
[1,] 6.612235 6.895032 -4.004501 -8.250871 2.3098680 2.0388161 23.5202949
[2,] 1.082576 0.769107  1.119480  1.206932 0.9930102 0.9078762  0.9544335
            [,8]      [,9]     [,10]
[1,] -12.2080648 9.0074524 0.2358715
[2,]   0.8256081 0.8669045 0.9017415

または、sapply を使用して同じ出力を生成するには (置換で応答しないので便利です)、

> sapply(integer(10), function(x) {
    random <- rnorm(100)
    c(sum(random),var(random))
}) 

これの最後からデータ フレームを取得する場合は、転置する必要があります。それで

> data.frame(t(sapply(integer(10), function(x) {
    random <- rnorm(100)
    list(s=sum(random),v=var(random))
})))
            s         v
1   -6.343845    1.0397
2    12.94773 0.9480807
3    5.811322 0.9670198
4   -1.941444   1.04547
5  -0.9094589  0.862759
6   -2.852641 0.5504582
7   -8.471266  1.080554
8    -17.2341  1.201679
9    11.60805  1.150254
10  -7.138314  1.080731
于 2013-01-14T14:35:30.327 に答える