Использование оператора%>% из dplyr без загрузки dplyr в R

В настоящее время я создаю пакет, и мне было интересно, есть ли способ вызвать оператор %>% из dplyr без фактического присоединения пакета dplyr. Например, с любой функцией, которая экспортируется из пакета, вы можете вызвать ее с помощью двоеточия (::). Поэтому, если бы я хотел использовать функцию group_by без присоединения dplyr, я бы ввел dplyr::group_by. Есть ли что-то подобное для операторов?

Ответ 1

Вы можете ссылаться на любой объект с нестандартным именем, заключая в обратные ссылки. Это означает, что вы можете сделать это:

`%>%` <- magrittr::`%>%`

Это определит оператор %>% в вашей текущей среде. Например:

iris %>% head

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Ответ 2

Самый простой способ - загрузить пакет magrittr, который только делает трубопровод, и является исходным источником %>%. Если вы не хотите загружать какие-либо пакеты, вы все равно можете использовать %>%, но не в каком-либо действительно полезном способе (если вы не определяете его в своей среде, как предлагает Andrie). Использование его с :: будет выглядеть следующим образом:

# standard use
mtcars %>% summary()
# :: use
magrittr::"%>%"(mtcars, summary())

Вы действительно теряете преимущество чтения/не вложенности с помощью этого метода.

Поскольку вы говорите, что строите пакет, вы должны поместить magrittr в Импорт, или даже просто импортировать и захватить функцию "%>%". См. здесь для получения дополнительной информации.

Ответ 3

Если у вас установлен "dplyr", но не загружен, вы можете получить результат:

 dplyr::`%>%`   # Note the backticks, although quotes work as well.

Это отображает код, но внизу вы увидите, что его среда фактически является NAMESPACE "magritter", который импортирует "dplyr". Как указывают два других знающих респондента, существует несколько способов использовать его как функцию, хотя он не может быть просто вставлен между аргументами lhs и rhs, если вы не создадите локальную копию с фланкирующим "%", или называть его функциональными скобками. Парсер R не разрешает:

>  mtcars dplyr::"%>%" summary()
Error: unexpected symbol in " mtcars dplyr"