如何向`rnorm`函数的`mean`参数提供向量?

3

我如何将一个向量提供给rnorm函数中的mean参数?

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)组样本,每组样本中有n=25个样本,第一组样本的均值为1.5,第二组样本的均值为1.6,以此类推,一直到最后一组的均值为3.5。因此,最终我将获得21组大小为25的样本集合。

2
你想要 n=21 吗?如果不是,你需要指定你实际期望得到的内容。 - Dason
希望问题更加清晰明了。 - TMOTTM
因为这不是我正在寻找的,所以不需要再问第二遍。 - TMOTTM
1个回答

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)
rnorm中的meansd参数是向量化的。它们将首先被循环使用,以达到长度为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设置为消除随机性,这样随机样本将以1的概率取mean值。这使我们能够证明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个样本,且均值相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接