我是plumber软件包的新手,我试图弄清楚如何通过可以接受可选参数的api使函数fun_2
可用。可选参数的默认值在R包的函数fun_1
中指定。我该如何做到这一点而不必覆盖fun_1
中指定的默认值?
我尝试过只在两个函数调用中列出参数而没有在{{1}中指定默认值的幼稚方法。但这产生了缺少的参数错误。
我还尝试在fun_2
中指定默认值。这可行,但并不理想。我不想覆盖fun_2
中指定的默认值,以防将来发生更改。我希望从api调用的函数始终具有与直接调用fun_1
所产生的结果相同的结果。
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"
"error":["500 - Internal server error"],"message":["Error in FUN(X[[i]], ...): argument \"y\" is missing, with no default\n"]
答案 0 :(得分:0)
我找到了一种效果很好的方法。我在fun_1
中列出了所有fun_2
参数,并将可选参数y
和z
的默认值设置为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
}