单个输入参数的可变条目数

时间:2014-05-22 14:54:47

标签: r

我正在尝试编写一个可以调用不同分布函数的函数,具体取决于用户提供的输入。以下示例不是来自我正在处理的代码,而是一个简单,可重现的代码:

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

是否有一种简单的方法可以让前一个例子中的代码像后者一样运行?

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