前言
我通常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)
没有产生这样的注释。
但是,在dplyrdplyr 0.7.0
的小插图编程中说,在包中包含函数(以避免注释)的适当语法是:dplyr
y <- dplyr::filter(x, .data$v > .data$w)
因此,新闻文件说“不再需要每个主要动词的下划线版本,因此这些功能已被弃用(但为了向后兼容而保留)。”
问题
小插图说上面的新语法不会产生R CMD check
NOTES,“前提是你也用 . 导入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)
随着更多变量被引用,详细程度也会增加。但是,我不想在带下划线的版本中使用不那么冗长的语法,因为它已被弃用。