我正在尝试where在我自己的 R 包中使用。我打算在代码中使用它,tidyselect::where()但该函数未导出。出于同样的原因,您不能使用@importFrom tidyselect where.
我不想用:::. 如果我简单地将其称为where(),则该代码将起作用,但随后我在支票中收到了一条注释。
未定义的全局函数或变量:其中
这里发生了什么?我假设该函数按原样工作,因为它在我的代码中捕获为表达式,而 tidyeval 知道如何在评估时处理它?
例子
例如,如果您启动一个干净的 R 会话,以下将工作(dplyr 1.0.0)而无需运行library(dplyr). 它清楚地知道如何处理where。
dplyr::mutate(iris, dplyr::across(where(is.numeric), ~.x + 10))
Run Code Online (Sandbox Code Playgroud)
同样,这也可以,但我不想在包中使用它。所以我使用上面的,它被标记为devtools::check().
dplyr::mutate(iris, dplyr::across(tidyselect:::where(is.numeric), ~.x + 10))
Run Code Online (Sandbox Code Playgroud)
题
如何在包中使用wherefromtidyselect而不将其标记为未定义?
All*_*ron 16
有针对此类问题的现有解决方法。从中导出的项目之一是tidyselect名为vars_select_helpers. 这包括where,所以如果你这样做
mutate(iris, dplyr::across(tidyselect::vars_select_helpers$where(is.numeric), ~.x + 10))
Run Code Online (Sandbox Code Playgroud)
您应该获得相同的功能,而不会对检查工具产生任何抱怨。