【发布时间】:2018-06-10 14:49:19
【问题描述】:
例如,将expr(cumsum(1:3))的输出中的cumsum更改为cumprod。
目前我唯一能想到的是将expr(cumsum(1:3)) 的输出转换为字符串,对其进行编辑,然后将其改回函数调用。
不过,这似乎是一个非常糟糕的解决方案,我正在努力寻找更好的方法。
library(rlang)
f(expr(cumsum(1:4)), cumprod)
# [1] 1 2 6 24
这基本上就是我想要实现的目标。你能帮我找到一个起点吗?
【问题讨论】:
-
我不清楚你如何决定要替换哪个函数(因为
:也是一个函数)。但是如果你想总是替换外部的,你可以定义下面的函数f <- function(x, y) {tmp <- substitute(x) ; tmp[1] <- substitute(y) ; eval(tmp)}然后使用它如下f(cumsum(1:4), cumprod()) -
@DavidArenburg ;如果你使用
tmp[[1]],你可以避免() -
@user20650 好点。
-
@DavidArenburg 谢谢!这正是我希望找到的!
标签: r functional-programming metaprogramming