我正在寻找在R中不同包中特定函数的方法。例如,
methods(broom::tidy)
将返回包broom中函数tidy的所有方法。对于我的当前问题,如果我可以像这样在另一个函数中使用methods
函数,那就更好了:
f1 <- function(x,y){
methods(x::y)
}
(我删掉了与我的问题无关的其他代码部分。)
但是当我按照以下方式运行该函数时:f1 <- function(x,y){ methods(x::y)}
f1(broom,tidy)
我遇到了以下错误:
Error in loadNamespace(name) : there is no package called ‘x’
如果我尝试修改函数但保持包不变,我会得到类似的错误:
f2 <- function(y){ methods(broom::y)}
f2(tidy)
错误:从'namespace:broom'中未导出对象'y'
如何使函数中的包和函数名称正确地评估?当前的问题是否与r
在函数中尝试评估/替换值时有关?
f2(dplyr, between)
转换为函数?它返回未求值的函数调用。类似于f2(dplyr, between)(1,2,3)
的东西。 - slava-kohut\
::`(dplyr, between)(1, 2, 3),或者你可以使用
eval()表达式
eval(f2(dplyr, between))(1, 2, 3)`。 - MrFlickrlang
的解决方案?我尝试用enexpr
或enquo
替换substitute
,但是出现了参数必须是符号的错误。我最初认为substitute
在rlang
中与enexpr
相同,但现在我意识到substitute
可能具有更多功能。 - Mikef3 <- function(x,y){ x <- rlang::ensym(x); y <- rlang::ensym(y);rlang::eval_tidy(rlang::quo(methods(
::(!!x, !!y))))}
解析似乎在::
操作符周围有些古怪。 - MrFlicksubstitute
,但我很感激rlang
的解决方案! - Mike