所以我有这个循环:
set.seed(11)
k=10000 # replicates
n=100 # sample size of each replication
t.mean = 0 # initialize vector of trimmed means
for(i in 1:k){
dat=rnorm(n)
t.mean[i]=mean(dat,trim=.05)
}
mean(t.mean)
var(t.mean)
我试图用apply()函数替换for循环中涉及的代码
我认为这样可行
set.seed = 11
k = 10000
n = 100
t.mean = 0
dat = rnorm(n)
dat = as.data.frame(dat)
t.mean =apply(dat,c(1,2), mean,trim=.05)
mean(t.mean)
var(t.mean)
然而,我没有得到与以前相同的值,并且它们不像前面使用for循环的情况一样保持不变。当我使用申请时,我究竟做错了什么?
答案 0 :(得分:2)
此处replicate()
功能可能更有用
set.seed(11)
out <- replicate(10, mean(rnorm(100), trim = 0.05))
k <- 10
给出
> mean(out)
[1] 0.007134792
> var(out)
[1] 0.009029396
与您为同一for
显示的k
循环相匹配。
如果您想使用apply()
,另一种选择是生成整个随机正常值集合,按k
列矩阵排列为100行,然后{对该矩阵的列{1}} apply()
。例如
mean()
与上述内容以及set.seed(11)
rnd <- matrix(rnorm(100*k), ncol = k)
out2 <- apply(rnd, 2L, mean, trim = 0.05)
循环
for()
第二条路线的一个优点是您拨打> mean(out2)
[1] 0.007134792
> var(out2)
[1] 0.009029396
一次而不是rnorm()
次。