【发布时间】:2020-03-20 04:28:45
【问题描述】:
我的目标是修补rlang::eval_tidy 函数。在其original form 中,它只调用.Call:
eval_tidy <- function(expr, data = NULL, env = caller_env()) {
.Call(rlang_eval_tidy, expr, data, env)
}
在我的情况下,对于一种单一类型的值,它的行为应该不同。因此,我将其更改为可以添加自定义行为的多方法:
package <- getNamespace('rlang')
unlockBinding('eval_tidy', package)
package$eval_tidy <- function(expr, data=NULL, env=caller_env()) UseMethod('eval_tidy', data)
lockBinding('eval_tidy', package)
eval_tidy.custom.value <- function(expr, data, env) ....
eval_tidy.default <- function(expr, data, env) .Call(rlang_eval_tidy, expr, data, env)
现在它像我的自定义数据类型一样工作,但如果使用其他数据类型,我会收到以下错误:
NotImplementedError:eval_tidy.default(X[[i]]) 中的错误:对象 'rlang_eval_tidy' 未找到
【问题讨论】:
标签: r tidyverse rlang tidyeval