在R中使用数据框不同alpha/beta值调用rbeta函数的问题
问题分析与解决
你的代码出错的核心原因是:在sapply的匿名函数中,你直接传入了整个df$alpha和df$beta列向量,而非每次循环取当前行对应的单个alpha、beta值。R的向量循环机制会让rbeta重复使用这两个向量的所有元素,而非按行匹配参数。
修正方法一:在sapply中按索引取行参数
修改匿名函数,用循环变量x索引df的对应行,获取该行的alpha和beta值:
I=10 rb <- sapply(1:3, function(x) rbeta(I, df$alpha[x], df$beta[x]))
执行后rb会是一个10行3列的矩阵,每列对应df中一行参数生成的10个beta分布样本(比如第一列就是rbeta(10,27,104)的结果)。
修正方法二:用apply按行处理(更直观)
如果想直接对df的每行进行操作,用apply按行遍历会更清晰,最后转置调整矩阵维度:
I=10 rb <- t(apply(df, 1, function(row) rbeta(I, row["alpha"], row["beta"])))
这里apply(df,1,...)会遍历df的每一行,每行生成10个样本,t()转置后得到3行10列的矩阵,每行对应一组参数的样本。
内容的提问来源于stack exchange,提问作者lauraellen
相关产品推荐
相关产品推荐

