我试图在我自己的R包中使用where。我本来打算在代码中使用它作为tidyselect::where(),但是函数没有导出。出于同样的原因,您不能使用@importFrom tidyselect where。
我不想用:::来引用它。如果我简单地将它称为where(),那么代码就可以工作了,但是在支票中我会收到一条便条。
未定义的全局函数或变量:
这里发生什么事情?我假设这个函数的工作方式是这样的,因为它在我的代码中捕获了表达式,而tidyeval知道如何在计算中处理它?
示例
例如,如果您启动一个干净的R会话,以下内容将在不运行library(dplyr)的情况下工作(dplyr 1.0.0)。它清楚地知道如何处理where。
dplyr::mutate(iris, dplyr::across(where(is.numeric), ~.x + 10))同样,这也会起作用,但我不想在包中使用它。所以我使用上面的内容,它在devtools::check()中被标记。
dplyr::mutate(iris, dplyr::across(tidyselect:::where(is.numeric), ~.x + 10))问题
如何在不将where标记为未定义的情况下使用包中的tidyselect?
发布于 2020-06-18 22:12:48
对于这种类型的问题,有一个现有的解决办法。从tidyselect导出的项目之一是一个名为vars_select_helpers的助手函数列表。这包括where,所以如果您这样做了
mutate(iris, dplyr::across(tidyselect::vars_select_helpers$where(is.numeric), ~.x + 10))您应该获得相同的功能,而不抱怨检查工具。
https://stackoverflow.com/questions/62459736
复制相似问题