假设我们在R中有一个用户定义的函数,其中包含许多(> 20)个函数参数。这些参数都没有预定义的标准值(例如arg1 = 10)。
简化示例:
foo <- function(value, increment){
value + increment
}
bar <- foo(value = 2, increment = 3)
bar
#> [1] 5
由reprex package(v0.2.1)于2019-03-25创建
问题:有没有一种方法可以一次“更新”一个/几个参数,同时保持所有其他参数的输入不变? 对于上面的示例,它类似于:
update(bar, increment = 8)
#> [1] 10
请注意,此处value = 2
已为对象bar
指定,并且仅increment
更改。
答案 0 :(得分:3)
您可以仅创建call
对象并对其进行修改:
library(pryr)
cl <- call("foo",value = 2,increment = 3)
eval(cl) #5
cl_new <- modify_call(cl,list(increment = 8))
eval(cl_new) #10
在这里,我使用了 pryr 软件包,它是modify_call
函数,但是如果您检查该函数的代码,就会发现自己实现一个简单版本非常简单
基本上,cl[["increment"]]
将在调用increment
的调用中产生原始值,因此您可以修改该值或其他值,也可以向该调用添加新的参数。