有没有办法间接访问输入参数?

时间:2021-05-30 13:06:19

标签: r function

目前我有一个带有很多参数的大函数(每个都有一个默认值),我想测试每个参数的敏感性。因此,我想知道是否有办法通过相应的字符串来处理函数的输入。

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() 的输入。

谢谢。

2 个答案:

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