序言
我常用dplyr
在我的包裹里。之前 0.7.0
, 我使用的是 dplyr
的下划线版本在 R CMD CHECK
中避免使用注释的动词.例如,代码:
x <- tibble::tibble(v = 1:3, w = 2)
y <- dplyr::filter(x, v > w)
会产生
R CMD CHECK
注意:* checking R code for possible problems ... NOTE
no visible binding for global variable ‘v’
相比之下,使用标准评估版:
y <- dplyr::filter_(x, ~v > w)
没有产生这样的注意。
然而,在
dplyr 0.7.0
, 小插图 Programming with dplyr表示包含 dplyr
的适当语法包中的功能(以避免注释)是:y <- dplyr::filter(x, .data$v > .data$w)
因此,news file说“不再需要每个主要动词的下划线版本,因此这些功能已被弃用(但为了向后兼容而保留)。”
问题
小插图说上述新语法不会产生
R CMD check
注意,“前提是您还导入了 rlang::.data
和 @importFrom rlang .data
。”但是,当我运行代码时:y <- dplyr::filter(x, rlang::.data$v > rlang::.data$w)
Evaluation error: Object `From` not found in data.
此错误是否与以下类似?
y <- dplyr::filter(x, v == dplyr::n())
Evaluation error: This function should not be called directly.
也就是说,对于某些函数,以包为前缀调用它们会产生错误? (也许与它们是否已被导出有关?)
评论
顺便说一句,是否有一种不那么冗长的方式来编写包友好的
dplyr
在 0.7.0 中使用新语法的函数?特别是 dplyr >=0.7.0
的语法:y <- dplyr::filter(x, .data$v > .data$w)
比
dplyr <0.7.0
的语法更冗长:y <- dplyr::filter_(x, ~v > w)
并且随着引用更多变量,详细程度会增加。但是,我不想在带下划线的版本中使用不那么冗长的语法,因为它已被弃用。
最佳答案
for some functions, calling them prefixed with the package yields errors?
没错,但我们可以让它们发挥作用,让事情变得更可预测。您可以为此功能提交 github 问题。
is there a less verbose way of writing package-friendly dplyr functions with the new syntax in 0.7.0?
另一种方法是将所有列符号声明为 R,例如内
globalVariables(c("v", "w"))
在您的包裹中某处的声明。理想情况下,R 应该了解 NSE 函数,并且在这些情况下永远不要警告未知符号。
关于r - dplyr 0.7.0 tidyeval 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712189/