我有以下参数列表和向量:
myList <- list(c(3, 0, 1), c(2, 2, 2))
vPar1 <- c(1, 5, 100)
vPar2 <- c(100, 5, 1)
Run Code Online (Sandbox Code Playgroud)
我正在尝试从Beta具有形状参数shape1 = vPar1和shape2 = vPar2(元素方式)的3 个分布中抽取样本。
预期结果将是一个包含两个元素的列表:第一个元素将由 4 个随机数组成(3 个来自分布Beta(1, 100),1 个来自Beta(100, 1)分布),而第二个列表元素将由总共 6 个随机数(a 的 2 个随机数)组成。 Beta(1, 100),Beta(5, 5)以及Beta(100, 1)每个分布)。
我尝试使用mapplyie 循环遍历 3 个参数的元素来产生所需的结果,但我无法弄清楚应该如何准确使用它:
mapply(function(x, shape1, shape2) {unlist(rbeta(x, shape1, shape2))},
myList,
MoreArgs = list(shape1 = vPar1, shape2 = vPar2),
SIMPLIFY = FALSE)
Run Code Online (Sandbox Code Playgroud)
这会产生一个包含两个元素的列表,但每个元素有 3 个随机数,分别插入预期的 4 个和 6 个数字。如有任何建议,我将不胜感激!谢谢。
一种选择是遍历listwithlapply然后将“vPar1”和“vPar2”作为参数应用在嵌套Map在lapply
lapply(myList, function(x) unlist(Map(rbeta, n = x, shape1 = vPar1, shape2 = vPar2)))
#[[1]]
#[1] 0.031955823 0.001533638 0.012877288 0.998004973
#[[2]]
#[1] 0.021860350 0.002145949 0.514477229 0.479578366 0.996876238 0.992356962
Run Code Online (Sandbox Code Playgroud)
也可以写成
lapply(Map(Vectorize(rbeta), myList, MoreArgs = list(shape1 = vPar1,
shape2 = vPar2)), unlist)
Run Code Online (Sandbox Code Playgroud)