我想以下列方式生成二元变量。我有四个长度相等的列表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
中执行此操作?
答案 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)重复m
和s
向量的元素,如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对吗?