Преамбула
Я обычно использую 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
, vignette Программирование с dplyr говорит, что соответствующий синтаксис для включения dplyr
функций в пакеты (чтобы избежать ПРИМЕЧАНИЕ):
y <- dplyr::filter(x, .data$v > .data$w)
Следовательно, в файле новостей говорится, что" подчеркнутая версия каждого основного глагола больше не нужна, и поэтому эти функции устарели ( но остаются вокруг для обратной совместимости).
Вопрос
Виньетка говорит, что новый синтаксис не даст 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)
а многословие увеличивается по мере ссылки на большее количество переменных. Однако я не хочу использовать менее подробный синтаксис с подчеркнутой версией, поскольку он устарел.