Функция импортирует "dplyr", но я все еще получаю сообщение об ошибке "не удалось найти функцию"%>% "" - PullRequest
0 голосов
/ 16 июня 2020

Я создал функцию (внутри пакета), которая использует пакет «dplyr». Я использовал roxygen2 для документирования своей функции и включил #' @import dplyr. Обычно в своей функции я использую dplyr::function, когда вызываю определенную функцию из пакета. Однако я не уверен, как использовать аналогичную структуру, чтобы остановить эту ошибку:

Error in data %>% dplyr::group_by(dir.binned) %>% dplyr::summarise(count = n()) %>%  : 
  could not find function "%>%"

Код, вызывающий ошибку:

    T_data <- data %>%
  dplyr::group_by(dir.binned) %>%
  dplyr::summarise(count= n()) %>%
  dplyr::mutate(y = count/sum(count))

Кто-нибудь знает лучший способ решения это ошибка?

Спасибо!

1 Ответ

2 голосов
/ 16 июня 2020

@import просто объявляет, что вы импортируете пакет, но не делает никаких имен напрямую доступными (без явного указания его полного имени через pkg::name).

Напротив, @importFrom делает ли имена доступными напрямую, и это то, что вам нужно использовать для операторов. Итак, перед вашей функцией, используя оператор канала, напишите

#' @importFrom dplyr %>%

Вместо этого вы также можете импортировать оператор канала из пакета 'magrittr' - это то место, откуда 'dplyr' (в настоящее время) импортирует его. Однако это добавило бы к вашему пакету еще одну прямую зависимость, что противоречит идее минимизации зависимостей пакета в максимально разумной степени. Правда, ваш пакет в настоящее время (транзитивно) зависит от 'magrittr' в любом случае , но если 'dplyr' когда-либо решит реализовать свой собственный оператор канала (или импортировать его из другого места), эта транзитивная зависимость изменится.

Еще один способ - использовать псевдоним оператора в вашем собственном пакете:

`%>%` = dplyr::`%>%`

Однако это действительно имеет смысл, только если вы намереваетесь также повторно экспортировать оператор.

...