每次遍历循环时,您都会覆盖每列的整个内容,因为默认情况下 R 是矢量化的(在列上运行)。此外,每次迭代循环时都无需重置种子。试试这样的。
library(tidyverse)
set.seed(123)
lapply(
1:10,
function(k) {
data.frame(
mn1 = mean(rnorm(25, 1, 1)),
mn2 = mean(rnorm(25, 2, 1)),
rep = k
)
}
) %>%
bind_rows()
mn1 mn2 rep
1 0.9666697 2.102137 1
2 1.0102410 2.282576 2
3 0.7231910 1.769008 3
4 1.2152427 1.862371 4
5 1.1074981 1.875461 5
6 1.1727220 2.326180 6
7 0.9789770 2.025131 7
8 1.0981718 1.752828 8
9 0.9402713 1.928519 9
10 1.2714378 2.283175 10
或者,利用 n 的平均值从 N(mu, sd) 得出的事实是 N(mu, sd/sqrt(n)),
data.frame(
rep=rep(1:10),
mn1=rnorm(10, 1, sqrt(1/25)),
mn2=rnorm(10, 2, sqrt(1/25))
)
rep mn1 mn2
1 1 1.2053570 2.176493
2 2 1.1502123 2.041120
3 3 0.6981667 1.876713
4 4 0.9809705 1.853040
5 5 0.8208104 1.973639
6 6 0.5858498 2.062003
7 7 1.0300240 1.792064
8 8 0.9841577 1.963138
9 9 0.9805261 2.193453
10 10 1.0432305 1.978344