使用R中 Dataframe 的不同alpha和beta值应用或循环rbeta

lztngnrs  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(100)

我尝试使用sapply创建一个矩阵,其中包含rbeta使用不同的指定alpha和beta从数据集获得的输出,我认为这应该是相当简单的,但我正在努力。
这里有一些数据

q1 <- c(27, 104)
q2 <- c(25, 121)
q3 <- c(29, 114)
df <- as.data.frame(rbind(q1,q2,q3))
colnames(df) <- c('alpha','beta')

这就是我所做的。它给了我3个单独的rbeta样本,但我不认为它按行取正确的值。例如,第一个rbeta应该是:rbeta(I, 27, 104)

I=10
rb <- sapply(1:3, function(x) rbeta(I, df$alpha, df$beta))

有人能澄清我做错了什么吗?或者给我指出另一个方向?

cbjzeqam

cbjzeqam1#

在行上使用apply

set.seed(42)
apply(df, 1, function(x) rbeta(I, x["alpha"], x["beta"]))
             q1        q2        q3
 [1,] 0.1841086 0.1242001 0.1931461
 [2,] 0.2211195 0.1615636 0.2210664
 [3,] 0.2331062 0.1665653 0.1790950
 [4,] 0.2228934 0.1953668 0.2208726
 [5,] 0.2018876 0.1613773 0.2316363
 [6,] 0.2807989 0.2275919 0.2472799
 [7,] 0.2023407 0.1606147 0.1802312
 [8,] 0.3175574 0.1652301 0.2229498
 [9,] 0.2036065 0.2220179 0.1385964
[10,] 0.2680387 0.1564213 0.1738062

或使用Vectorize

set.seed(42)
Vectorize(rbeta)(I, df$alpha, df$beta)
           [,1]      [,2]      [,3]
 [1,] 0.1841086 0.1242001 0.1931461
 [2,] 0.2211195 0.1615636 0.2210664
 [3,] 0.2331062 0.1665653 0.1790950
 [4,] 0.2228934 0.1953668 0.2208726
 [5,] 0.2018876 0.1613773 0.2316363
 [6,] 0.2807989 0.2275919 0.2472799
 [7,] 0.2023407 0.1606147 0.1802312
 [8,] 0.3175574 0.1652301 0.2229498
 [9,] 0.2036065 0.2220179 0.1385964
[10,] 0.2680387 0.1564213 0.1738062
ecbunoof

ecbunoof2#

一般来说,我们可以使用Mapmapply来提供向量(或列表)形式的参数,如果它们的长度不匹配,比如这里的10,元素就会被回收。mapply试图简化为一个矩阵,就像sapplylapply相比所做的那样。如果您查看Vectorize的源代码,就会发现其中还包含mapply。)

set.seed(42)
mapply(rbeta, 10, df[, 1], df[, 2])
#            [,1]      [,2]      [,3]
#  [1,] 0.1841086 0.1242001 0.1931461
#  [2,] 0.2211195 0.1615636 0.2210664
#  [3,] 0.2331062 0.1665653 0.1790950
#  [4,] 0.2228934 0.1953668 0.2208726
#  [5,] 0.2018876 0.1613773 0.2316363
#  [6,] 0.2807989 0.2275919 0.2472799
#  [7,] 0.2023407 0.1606147 0.1802312
#  [8,] 0.3175574 0.1652301 0.2229498
#  [9,] 0.2036065 0.2220179 0.1385964
# [10,] 0.2680387 0.1564213 0.1738062

实际上,如果您说

mapply(rbeta, 10, c(27, 25, 29), c(104, 121, 114))

相关问题