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

R 单个输入参数的可变条目数,r,R,我正在尝试编写一个函数,它可以调用不同的分布函数,具体取决于用户作为输入提供的内容。下面的示例不是我现在正在编写的代码,而是一个简单、可复制的示例: fun <- function(dist, params){ rdist <- get(paste("r", dist, sep=""), mode="function") return(rdist(n = 1, params)) } 工作原理是: fun2 <- function(dist, params){ rd

我正在尝试编写一个函数,它可以调用不同的分布函数,具体取决于用户作为输入提供的内容。下面的示例不是我现在正在编写的代码,而是一个简单、可复制的示例:

fun <- function(dist, params){
  rdist <- get(paste("r", dist, sep=""), mode="function")
  return(rdist(n = 1, params))
}
工作原理是:

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
fun2您正在寻找:

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,...))
}
编辑 Op正在寻找一种解决方案,它将参数分组在一个参数params中

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

fun\u dist
switch
是否可以接受?你必须为每个分布写一行,但是你有很大的能力来传递参数(例如,正态分布和威布尔分布使用不同的参数名称)。很抱歉,我不接受你的答案,但我认为这对我来说是行不通的。我正在优化一个函数的参数,为此我显式地需要params输入。我正在寻找的一个解决方案将允许我获取参数向量c(mean=1,sd=0),并找到某种“unc'ing”方法,然后将每个元素输入函数。很抱歉,如果我在最初的问题中不清楚这一点。我找到了一个基于您的答案的解决方案,它产生了想要的结果:
fun
 fun_dist(mean=1, sd=0)
[1] 1

fun_dist('norm',mean=1, sd=0)
[1] 1
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))