R:如何为`rnorm`的`mean`参数提供一个向量?

时间:2016-08-14 19:55:28

标签: r vectorization

如何为mean的{​​{1}}参数提供向量?

rnorm

我想做around_int1_mean <- seq(1.5, 3.5, 0.1) 之类的事情,避免rnorm(n=25, mean=around_int1_mean, sd=0.2) - 循环。

我希望得到for个样本集length(around_int1_mean),其中均值(在第一个集合中)为1.5,然后是1.6,依此类推,直到最后一个集合的平均值为3.5。所以最后我得到了21套大小为25的样本。

1 个答案:

答案 0 :(得分:5)

  

我希望得到length(around_int1_mean)个样本集n=25,其中均值(在第一个集合中)为1.5,然后是1.6,依此类推,直到最后一个集合的平均值为3.5。所以最后我得到了21套大小为25的样本。

你需要

rnorm(n = length(around_int1_mean) * 25,
      mean = rep(around_int1_mean, each = 25), sd = 0.2)

mean中的sdrnorm参数是矢量化的。它们首先会被回收,长度为n。然后,对于i = 1, 2, ..., ni-th样本来自N(mean[i], sd[i])

另一个例子是,如果你想要每个均值的单个样本,请执行:

rnorm(n = length(around_int1_mean), mean = around_int1_mean, sd = 0.2)

由于@TMOTTM坚持认为我错了并且拒绝了我的答案,我必须出示证据来为自己辩护。

around_int1_mean <- seq(1.5, 3.5, by = 0.1)

我会设置sd = 0来消除随机性,因此随机样本只需要mean值,概率为1.这使我们能够证明rnorm正在生成正确的样本集纠正mean

x <- rnorm(n = length(around_int1_mean) * 25,
           mean = rep(around_int1_mean, each = 25), sd = 0)

另外,我会使用矩阵来演示它:

matrix(x, nrow = 25)

#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
# [1,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [2,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [3,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [4,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [5,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [6,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [7,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [8,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
# [9,]  1.5  1.6  1.7  1.8  1.9    2  2.1  2.2  2.3   2.4   2.5   2.6   2.7
#      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21]
# [1,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [2,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [3,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [4,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [5,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [6,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [7,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [8,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [9,]   2.8   2.9     3   3.1   3.2   3.3   3.4   3.5
# [ reached getOption("max.print") -- omitted 16 rows ]

显然我的回答是正确的。每列有25个样本具有相同的平均值。