【问题标题】:Vector of different n values in rbetarbeta 中不同 n 值的向量
【发布时间】:2025-12-15 08:05:02
【问题描述】:

我想在rbeta中同时使用不同参数值的向量,并得到一个长度为n个向量元素之和的向量。例如,

n <- c(10, 20, 30)
alpha <- c(1,2,3)
beta <- c(3,2,1)
rbeta(n, alpha, beta)

底线不符合我的意愿。我希望输出是长度为 10+20+30 = 60 的向量,前 10 个元素是来自 beta(1,3) 的 10 个样本,接下来是来自 beta(2,2) 的 20 个元素和下一个来自 beta(3,1) 的 30 个元素。最好的方法是什么?

【问题讨论】:

  • rbeta(sum(n), 2, 1).....?

标签: r


【解决方案1】:

一般来说,将函数应用于向量的元素时,您需要在输入向量上使用lapply

unlist(lapply(n, rbeta, 2, 1)

但是,在您的情况下,您可以简单地 sum 所有 ns:

rbeta(sum(n), 2, 1)

如果alphabeta 有多个参数,则可以改用Map(注意,与lapply 相比,参数是倒置的):

unlist(Map(rbeta, n, alpha, beta))

【讨论】:

  • 谢谢你,但我意识到我的问题不够详细,所以我编辑了它。在我的情况下,我实际上需要不同的 alpha 和 beta 值,所以我不能只对 n 向量求和。
  • @SarahK 在这种情况下,lapply 或其姐妹mapply 是你的朋友。
  • 你还需要注意mapplySIMPLIFY参数,如果你碰巧有一个等于n值的向量...
  • @BenBolker Dang,我怎么能忘记这个?!出于这个原因,我总是使用Map
【解决方案2】:

对于您修改后的问题,我认为明智地使用rep() 会使其发挥作用。

n <- c(10, 20, 30)
alpha <- c(1,2,3)
beta <- c(3,2,1)
rbeta(sum(n),rep(alpha,n),rep(beta,n))

【讨论】:

    最近更新 更多