我正在尝试编写一个可以调用不同分布函数的函数,具体取决于用户提供的输入。以下示例不是来自我正在处理的代码,而是一个简单,可重现的代码:
fun <- function(dist, params){
rdist <- get(paste("r", dist, sep=""), mode="function")
return(rdist(n = 1, params))
}
但是当我使用以下语法运行该函数时,会出现明显不需要的结果:
> fun("norm", c(mean=1, sd=0))
[1] 1.713108
工作是什么:
fun2 <- function(dist, params){
rdist <- get(paste("r", dist, sep=""), mode="function")
return(rdist(n = 1, params[1], params[2]))
}
> fun2("norm", c(mean=1, sd=0))
[1] 1
是否有一种简单的方法可以让前一个例子中的代码像后者一样运行?
答案 0 :(得分:2)
您正在寻找:
do.call("rnorm", list(n=1,mean=1, sd=0))
你可以将它包装在一个函数中:
fun_dist <- function(dist="norm",...){
rdist <- paste("r", dist, sep="")
do.call(rdist, list(n=1,...))
}
然后你称之为:
fun_dist(mean=1, sd=0)
[1] 1
fun_dist('norm',mean=1, sd=0)
[1] 1
Op正在寻找一种解决方案,它将参数分组在一个参数参数中。
fun_dist <- function(dist="norm",params){
rdist <- paste("r", dist, sep="")
do.call(rdist, as.list(c(n=1,params)))
}
fun_dist('norm',c(mean=1, sd=0))