如何在不覆盖其他函数指定的默认值的情况下将可选参数传递给水管工函数?

时间:2019-03-30 16:07:41

标签: r plumber

我是plumber软件包的新手,我试图弄清楚如何通过可以接受可选参数的api使函数fun_2可用。可选参数的默认值在R包的函数fun_1中指定。我该如何做到这一点而不必覆盖fun_1中指定的默认值?

我尝试过只在两个函数调用中列出参数而没有在{{1}中指定默认值的幼稚方法。但这产生了缺少的参数错误。

我还尝试在fun_2中指定默认值。这可行,但并不理想。我不想覆盖fun_2中指定的默认值,以防将来发生更改。我希望从api调用的函数始终具有与直接调用fun_1所产生的结果相同的结果。

fun_1(在R程序包中)

fun_1

天真的方法

fun_1 <- function(x, y = c("a", "b", "c"), z = c("d", "e", "f"){
  ...
}
#* @post /myapi
  fun_2 <- function(x, y, z){
    fun_1(x, y, z)
}
curl -X POST "http://localhost:8000/myapi?x=0.001"

这可行,但可能会覆盖fun_1默认值

"error":["500 - Internal server error"],"message":["Error in FUN(X[[i]], ...): argument \"y\" is missing, with no default\n"]

1 个答案:

答案 0 :(得分:0)

我找到了一种效果很好的方法。我在fun_1中列出了所有fun_2参数,并将可选参数yz的默认值设置为NULL。然后,我将所有参数放入列表中,从列表中删除空参数,然后使用fun_1函数将其余参数列表传递给do.call

#* @post /myapi
fun_2 <- function(x, y = NULL, z = NULL){
  params <- list(x = x, y = y, z = z)
  params <- params[!sapply(params, is.null)]
  result <- do.call(fun_1, params)
  result
}