R 如何在数据帧中对给定n、分布名称和参数的分布进行采样?

R 如何在数据帧中对给定n、分布名称和参数的分布进行采样?,r,performance,apply,R,Performance,Apply,我有一个数据帧: priors <- data.frame(dist = c('lnorm', 'beta', 'gamma'), a = c(0.5, 1, 10), b = c(0.4, 25, 4), n = c(100, 100, 100) ) priors参见?do.call pr.samp &

我有一个数据帧:

priors <- data.frame(dist = c('lnorm', 'beta', 'gamma'),
                      a   = c(0.5, 1, 10),
                      b   = c(0.4, 25, 4),
                      n   = c(100, 100, 100)
                     )
priors参见?do.call

pr.samp <- function(n,dist,a,b) {
    do.call(paste('r',dist,sep=""),list(n,a,b))
}
或者,Joshua的解决方案更干净:

sapply(1:nrow(priors), function(x) do.call(pr.samp,as.list(priors[x,])))

《财富》杂志的另一位候选人(106).>财富杂志(106)如果答案是parse(),你通常应该重新思考这个问题Thomas Lumley R-help(2005年2月)或您可以再次使用
do.call
:sappy(1:nrow(priors),function(x)do.call(pr.samp,as.list(priors[x,])
我不知道它是否“更干净”,但它增强了
do.call的实用性。请注意,您不需要
as.list
-数据框已经是一个列表了。
sapply(1:nrow(priors),function(x){
  pr.samp(priors$n[x],priors$dist[x],priors$a[x],priors$b[x])})
sapply(1:nrow(priors), function(x) do.call(pr.samp,as.list(priors[x,])))