5

一些背景知识:首先,我想从 [R] 中的均匀 (0,1) 分布生成多组样本(每个样本大小为 n)。我知道对于某些样本大小 x,从均匀分布生成的命令是 runif(n=x),例如,如果我想要样本大小 20,则命令是

runif(n=20)

接下来,我使用了命令

复制(100,runif(n=20))

这生成了一个值的双矩阵,然后我可以将其转换为具有 100 列和 20 行的数据集。

我是否可以生成一个由所有列向量的样本均值组成的数据集(从均匀分布中提取的 100 个集合的样本均值)?

谢谢您的帮助。

4

4 回答 4

10

您可以使用colMeans.

data <- replicate(100, runif(n=20))
means <- colMeans(data)
于 2012-04-25T19:56:17.850 回答
4

生成数据:

data <- replicate(100, runif(n=20))

列、行的方式:

col_mean <- apply(data, 2, mean)
row_mean <- apply(data, 1, mean)

列、行的标准差

col_sd   <- apply(data, 2, sd)
row_sd   <- apply(data, 1, sd)
于 2012-04-25T20:08:27.913 回答
2

根据 Nico 的答案,您可以改为调用runif(),将其格式化为矩阵,然后采用 colMeans 。它证明更快并且等效于其他答案。

library(rbenchmark)
#reasonably fast
f1 <- function() colMeans(replicate(100,runif(20)))
#faster yet
f2 <- function() colMeans(matrix(runif(20*100), ncol = 100))

benchmark(f1(), f2(), 
          order = "elapsed", 
          columns = c("test", "elapsed", "relative"),
          replications=10000)

#Test results
  test elapsed relative
2 f2()    0.91 1.000000
1 f1()    5.10 5.604396
于 2012-04-25T22:25:57.080 回答
2

如果我理解正确: apply(replicate(100,runif(n=20)),2,mean)

于 2012-04-25T19:54:24.093 回答