Как использовать операторы Rlang в пакете? - PullRequest
1 голос
/ 27 марта 2019

Я пишу пакет, который использует функции tidyverse, то есть использует нестандартную оценку, например dplyr::filter, например:

setMethod("filter_by_id",
          signature(x = "studies", id = "character"),
          definition = function(x, id) {
            study_id <- rlang::expr(study_id)
            lst <- purrr::map(s4_to_list(x), ~ dplyr::filter(.x, !!study_id %in% id))
            y <- list_to_s4(lst, "studies")
            return(y)
          })

Я использую оператор !! (и, вероятно, я буду использовать еще несколько других из пакета rlang), и мне интересно, нужно ли мне явно импортировать его как с pipe-оператором %>%, так как объяснил в этом вопросе: R: использовать оператор трубы magrittr в самописном пакете .

Есть ли что-то эквивалентное usethis::use_pipe(), но для операторов из rlang?

1 Ответ

3 голосов
/ 19 апреля 2019

Согласно Хэдли, оператор !! больше похож на вежливую беллетристику , чем на фактический оператор, поэтому вам не нужно его импортировать.

Пока мы действовали так, как будто !! а также !!! являются регулярными префиксными операторами, такими как +, - и! Они не. С точки зрения R, !! а также !!! просто повторное применение!:

!!TRUE
#> [1] TRUE
!!!TRUE
#> [1] FALSE

Как только функция rlang обнаруживает этот «оператор», она обрабатывает его по-разному для выполнения необходимой аккуратной оценки (поэтому оператор полезен только в контексте rlang)

!! а также !!! вести себя особенно внутри всех функций цитирования, работающих на Rlang, где они ведут себя как реальные операторы с приоритетом, эквивалентным унарным + и -.

Вот почему вам нужно только импортировать нужную вам функцию rlang, поскольку логика работы с !! лежит внутри rlang внутренних органов, а не отдельной функции, такой как magrittr pipe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...