r - 使用 apply() 代替 for 循环

标签 r

所以我有这个 for 循环:

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 循环的情况那样保持相同。当我使用 apply 时,我到底做错了什么?

最佳答案

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 行列矩阵,然后 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()一次而不是k次。

关于r - 使用 apply() 代替 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148265/

相关文章:

r - 生成 R ggplot 线图,其颜色/类型以不同变量为条件

r - 如何在不更改名称本身的情况下向列名称添加 "add"附加信息?

r - 在 R 中绘制球体上的点

r - 如何在 R 中将 30 秒数据扩展到 60 分钟数据

r - 自定义缩放轴后ggplot2缺少标签

python - 在 Python 中重现 R 的高斯过程最大似然回归

c# - 在 R 中,如何以 yyyymmdd 格式输出 lubridate 兼容日期? .NET 中相当于 .ToString ("yyyyMMdd")?

r - 如果通常的 `t( )` 不起作用,如何在 r 中转置矩阵?

r - 验证日期序列的顺序是否正确

带有页面导航的 rmarkdown