前言
我经常在我的包中使用dplyr
。在0.7.0
之前,我使用下划线版本的dplyr
动词来避免在R CMD CHECK
期间出现NOTE。例如,代码:
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中,文档使用dplyr编程表明在打包时包含dplyr函数(以避免注意事项)的适当语法为:
y <- dplyr::filter(x, .data$v > .data$w)
因此,新闻文件指出:“不再需要每个主要动词的下划线版本,因此这些函数已被弃用(但为了向后兼容而保留)。” 问题 vignette说上述新语法不会产生
R CMD check
NOTES,“前提是您还使用@importFrom rlang .data
导入了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.
对于某些函数,用包前缀调用它们会产生错误?(也许与它们是否被导出有关?) 评论 顺便问一下,在0.7.0中使用新语法编写面向包的
dplyr
函数是否有更简洁的方法?特别是dplyr >=0.7.0
的语法:y <- dplyr::filter(x, .data$v > .data$w)
比起 dplyr <0.7.0
的语法,这个更冗长:
y <- dplyr::filter_(x, ~v > w)
当引用更多的变量时,冗长度会增加。然而,我不想使用下划线版本的简洁语法,因为它已经被弃用。
dplyr
还是rlang
? - user3646834