【发布时间】:2019-05-24 23:41:42
【问题描述】:
我正在使用常量和向量(近似长度 = 100)执行计算,我需要为此模拟正态分布 N(使用 rnorm)。对于常数(K,标准偏差 = KU),我以标准方式使用 rnorm():
K <- 2
KU <- 0.2
set.seed(123)
KN <- rnorm(n = 3, mean = K, sd = KU)
什么提供长度为 3 (KN) 的向量:
[1] 1.887905 1.953965 2.311742
现在,我需要对向量(V,标准差 VU)做同样的事情。我的第一个猜测是使用:
V <- c(1, 2, 3)
VU <- 0.1 * V
set.seed(123)
VN <- rnorm(3, V, VU)
但只生成一个包含 3 个元素的向量,每个向量元素一个:
[1] 0.9439524 1.9539645 3.4676125
这其实是第一次模拟向量,但是我需要这个向量的3倍。一种解决方案是创建 9 个数字,但 VN 是 9 个元素的向量:
[1] 0.9439524 1.9539645 3.4676125 1.0070508 2.0258575 3.5145195 1.0460916 1.7469878 2.7939441
不是 3 个元素的 3 个向量。我想要的是VN =
[1] 0.9439524 1.0070508 1.0460916
[2] 1.9539645 2.0258575 1.7469878
[3] 3.4676125 3.5145195 2.7939441
所以,VN 是 3 个向量,我随后可以在其他计算中使用它们,例如 KN * VN。我找到的解决方案是:
set.seed(123)
VN <- as.data.frame(t(matrix(rnorm(3 * length(V), V, VU), nrow = length(V))))
但在我看来,这是一个相当麻烦的表达式(我需要在不同的地方重复多次,变量名很长)。基础 R 中是否有更简单的方法来生成随机向量?我想看到类似的东西:
VN <- rnorm.vector(3, V, VU)
【问题讨论】:
-
你可以使用
mapplymapply(rnorm, n = 3, mean = V, sd = VU)
标签: r