Подтвердить что ты не робот

Dplyr 0.7.0 tidyeval в упаковках

Преамбула

Я обычно использую 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) 

а многословие увеличивается по мере ссылки на большее количество переменных. Однако я не хочу использовать менее подробный синтаксис с подчеркнутой версией, поскольку он устарел.

4b9b3361

Ответ 1

для некоторых функций, вызывающих их с префиксом пакета, выдает ошибки?

Это правильно, но мы могли бы заставить их работать, чтобы сделать вещи более предсказуемыми. Вы можете указать проблему github для этой функции.

существует ли менее верный способ написания дружественных к пакету функций dplyr с новым синтаксисом в 0.7.0?

Альтернативой является объявление всех символов столбца R, например. внутри оператора globalVariables(c("v", "w")) где-то в вашем пакете.

В идеале R должен знать о функциях NSE и никогда не предупреждать о неизвестных символах в этих случаях.

Ответ 2

Еще одна задача - добавить строки, такие как

v <- NULL; # mark as not an unbound global reference

чуть выше ваших выражений, которые генерируют проверки CRAN. Он не менее точен (имена столбцов на самом деле не являются глобальными переменными) и имеет несколько ограниченную область.