My goal is to patch the rlang::eval_tidy
function. In its original form it only calls .Call
:
eval_tidy <- function(expr, data = NULL, env = caller_env()) {
.Call(rlang_eval_tidy, expr, data, env)
}
In my case it should behave different for one single type of value. Therefore, I've changed it to a multi-method where I can add my custom behavior:
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)
Now it works like intended for my custom data type, but if another data type is used, I get the following error:
NotImplementedError: Error in eval_tidy.default(X[[i]]) : object 'rlang_eval_tidy' not found