あなたのコードは、(下記参照)細かいですが、私はあなたが以下しようと示唆している:... nrSamples
私は供給という、シーケンス1、2、3の各要素のために、ここで
yourlist <- lapply(1:nrSamples, function(x) rnorm(n=5, mean = 5, sd = 3))
yourmeans <- sapply(yourlist, mean)
を最初の引数としてlapply
は、引数のシーケンスの指定された要素(すなわち、x
)で関数を実行します。しかし、私が提供した関数はx
に依存しないので、5000回複製され、出力はリストに格納されます(これはlapply
です)。このような状況でループを回避するのは簡単な方法です。言うまでもなく、あなたもちょうど別に手段から
yourmeans <- sapply(1:nrSamples, function(x) mean(rnorm(n=5, mean = 5, sd = 3)))
を実行することができ、後者は、あなたが望むものではない可能性がある、しかし、あなたの結果を保存しません。 sapply
にベクトルを返すように呼び出します。ベクトルを使用してヒストグラムをプロットすることができます。 hist(yourmeans)
。次の点を考慮して、あなたのコードは大丈夫であることを示すために
:
set.seed(42)
nrSamples = 5000
e <- list(mode="vector",length=nrSamples)
for (i in 1:nrSamples) {
e[[i]] <- rnorm(n = 5, mean = 5, sd = 3)
}
sample_means <- matrix(NA, 5000,1)
for (i in 1:5000){
sample_means[i] <- mean(e[[i]])
}
set.seed(42)
yourlist <- lapply(1:nrSamples, function(x) rnorm(n=5, mean = 5, sd = 3))
yourmeans <- sapply(yourlist, mean)
all.equal(as.vector(sample_means), yourmeans)
[1] TRUE
ここで、私は、ランダムな数字が同じであることを確認するために、乱数発生器にシードを設定します。他の人が指摘しているように、ループは簡単に回避することができますが、あなたのコードは正常に動作します。
'dat = replicate(5000、rnorm(5,5,3)、simplify = FALSE); hist(sapply(dat、mean)) ' – eipi10