我有一个数据框:
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 = "")
))}
我想知道:
提前致谢!
答案 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,])))