我从Dirichlet分布生成100个随机数,然后我需要使用输出从Gamma分布生成。这是代码:
a <- rdirichlet(100, c(1,1,1))
b <- c(3,3,3)
sapply(a, function(x) {rgamma(100, shape=2, rate =(b%*%a)) })
此处请注意,伽马分布的速率是矢量b和a(这是Dirichlet的输出)的点积。
我收到此错误消息:
Error in b %*% a : non-conformable arguments
答案 0 :(得分:1)
我怀疑你想要。我的库至少有四个具有rdirichlet
函数的不同包。):
library(MCMCpack)
apply(a, 1, function(x) {rgamma(100, shape=2, rate =(b %*% x)) })
当向量传递给%*%时,则需要具有相同的长度,并且传递单个元素而不是长度为3的行。 (表达式中也没有“x”。)
c(3,3,3) %*% 1
#Error in c(3, 3, 3) %*% 1 : non-conformable arguments
str(a %*% b)
# vectors can be assumed to be column matrices in the second position
num [1:100, 1] 3 3 3 3 3 3 3 3 3 3 ...
或者:
> str(b %*% t(a))
# .... or assumed to be row matrices in the first position.
num [1, 1:100] 3 3 3 3 3 3 3 3 3 3 ...