我通常使用我的包dplyr
。在0.7.0
之前,我在R CMD CHECK
期間使用dplyr
動詞的下劃線版本來避免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
,暈影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)
和冗長隨着更多的變量被引用。但是,我不想使用帶有下劃線版本的較少冗長語法,因爲它已過時。
謝謝。我應該在'dplyr'還是'rlang'下提出問題? – AJP123
你可以在dplyr檔案 – lionel
全部完成。 https://github.com/tidyverse/dplyr/issues/2930 – AJP123