在R中评估函数之前将函数更改为参数?

有没有办法,给定一个作为参数传递的函数,在评估它之前改变它的输入参数字符串?

这是我希望实现的伪代码:

test.func <- function(a, b) {
    # here I want to alter the b expression before evaluating it:
    b(..., val1=a)
}

给定传递给b的函数调用,我想添加一个as作为另一个参数,而不需要总是在b调用中指定….所以这个test.func调用的输出应该是:

test.func(a="a", b=paste(1, 2))
"1"  "2"  "a"

编辑:

我可以看到做这样的事情的另一种方法是,如果我可以在父函数的范围内分配附加参数(再次,作为伪代码);在这种情况下,a将在t1的范围内,因此在t2范围内,但不是全局分配的:

t2 <- function(...) {
  paste(a=a, ...)
}

t1 <- function(a, b) {
  local( { a <<- a; b } )
}

t1(a="a", b=t2(1, 2))

这有点类似于currying,因为我将参数嵌套在函数本身中.

编辑2:

只是再添加一条评论:我意识到一个相关的方法可能是使用“prototype-based programming”,这样就可以继承(这可以通过the proto package实现).但我希望在R中进行评估之前,可以更简单地更改输入参数.

最佳答案 你检查替补?我不知道它满足你的需要,但你可以使用它返回隐藏列表结构的事实,你可以修改如下

test.func <- function(a, b) {
    f <- substitute(b)
    f[["val1"]] <- a
    eval(f)
}

test.func(a="a", b=paste(1, 2))
# "1 2 a"
点赞