在R

时间:2019-03-25 16:39:20

标签: r function

假设我们在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更改。

1 个答案:

答案 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的调用中产生原始值,因此您可以修改该值或其他值,也可以向该调用添加新的参数。