如何在R中生成这样的随机数

时间:2012-01-24 17:26:14

标签: r

我想以下列方式生成二元变量。我有四个长度相等的列表n。我需要使用前两个列表作为均值列表,后两个作为方差列表,并生成正常的二元组。

例如n=2,我的列表为(1, 2)(3, 4)(5, 6)(7, 8),我需要 c(rnorm(1, mean=1, sd=sqrt(5)), rnorm(1, mean=2, sd=sqrt(6)), rnorm(1, mean=3, sd=sqrt(7)), rnorm(1, mean=4, sd=sqrt(8)),ncol=2)

如何以更实用的方式在R中执行此操作?

2 个答案:

答案 0 :(得分:4)

这是一种方式:

m <- 1:4
s <- 5:8
rnorm(n = 4, mean = m, sd = s)
[1]  4.599257  1.661132 16.987241  3.418957

这是有效的,因为像许多R函数一样,rnorm()是'向量化',这意味着它允许你用向量作为参数调用它一次,而不是在遍历迭代通过元素的循环中多次调用它载体

然后,您的主要任务是将您现在获得参数的“列表”转换为可以传递给rnorm()的向量。

注意:如果您想生成多个 - 对于每个均值/ sd组合,可以说3 - 随机变量,rnorm(n=rep(3,4), mean=m, sd=s)将无效。您必须:(a)重复ms向量的元素,如rnorm(n=3*4, mean=rep(m, each=3), sd=rep(s, each=3));或(b)按照DWin的回答中所述使用mapply()

答案 1 :(得分:2)

我告诉你你有一个清单,即一个Rlist:

plist <- list( a=list(1, 2), b=list(3, 4), c=list(5, 6), d=list(7, 8))
 means <-plist[c("a","b")]  # or you could use means <- plist[1:2]
 vars <- plist[c("c","d")]
 mapply(rnorm, n=rep(1,4), unlist(means), unlist(vars))
#[1]  3.9382147  1.0502025  0.9554021 -7.3591917

您使用了“双变量”一词。你真的想拥有具有特定相关性的x,y对吗?