目前我有一个带有很多参数的大函数(每个都有一个默认值),我想测试每个参数的敏感性。因此,我想知道是否有办法通过相应的字符串来处理函数的输入。
b <- function(x = 2,y = 3){
return(x+y)
}
param = 'y'
assign(param, 2)
param_name = as.name(param)
b(param_name = get(param))
不幸的是,这不起作用,因为 param_name 不是函数 b() 的输入。
谢谢。
答案 0 :(得分:2)
我们可以使用 do.call
构造调用并在内部使用 setNames
:
b <- function(x = 2, y = 3){
return(x+y)
}
param <- 2
param_name <- "y"
do.call("b", setNames(list(param), param_name))
#> [1] 4
由 reprex package (v0.3.0) 于 2021 年 5 月 30 日创建
答案 1 :(得分:0)
您可以从 pmap()
包中尝试 {purrr}
或其变体。 expand.grid()
创建一个包含所有可能参数组合的数据框。如果只有两个参数,请使用 map2()
。
b <- function(x = 2, y = 3, z = 1){
return(x+y+z)
}
p1 <- 1:2
p2 <- 3:4
p3 <- 5:6
params <- expand.grid(x = p1, y = p2, z = p3)
pmap(params, b)