【发布时间】:2023-03-11 22:49:01
【问题描述】:
如果给定作为参数传递的函数,有什么方法可以在计算之前更改其输入参数字符串?
这是我希望实现的伪代码:
test.func <- function(a, b) {
# here I want to alter the b expression before evaluating it:
b(..., val1=a)
}
鉴于传递给b 的函数调用,我想添加a 作为另一个参数,而无需总是在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))
这有点类似于柯里化,因为我将参数嵌套在函数本身中。
编辑 2:
对此再添加一条评论:我意识到一种相关的方法可能是使用“prototype-based programming”,以便继承事物(可以使用the proto package 实现)。但我希望有一种更简单的方法来在 R 中进行评估之前简单地更改输入参数。
【问题讨论】:
-
你能给出一个现实的问题吗?可能需要重新考虑您的方法。
标签: r functional-programming lazy-evaluation