如何在数据框中给出分布,给定n,分布名称和参数?

时间:2010-10-01 21:54:36

标签: 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)
                     )

我希望从参数为a和b的分布中提取n个样本。

我写过这个函数:

pr.samp <- function(n,dist,a,b) {eval (parse ( 
                    text = 
                    paste("r",dist,"(",n,",",a,",",b,")",sep = "")
                    ))}

我想知道:

  1. 有更好的方法吗?
  2. 如何使用其中一个apply函数在每一行上运行?
  3. 我是否必须将数据帧转换为矩阵才能执行此操作?
  4. 提前致谢!

1 个答案:

答案 0 :(得分:2)

看?do.call

pr.samp <- function(n,dist,a,b) {
    do.call(paste('r',dist,sep=""),list(n,a,b))
}

使用应用很困难,因为数据框中有混合的字符和数字向量。在行上使用apply将为您提供字符向量,这将导致错误。转换为矩阵将给出一个字符矩阵。我会做类似的事情:

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,])))