Помилка: не вдалося знайти функцію "%>%"


80

Я запускаю приклад у R, проходжу кроки, і все працює досі, за винятком цього коду, що видає помилку:

 words <- dtm %>%
 as.matrix %>%
 colnames %>%
 (function(x) x[nchar(x) < 20])

Помилка: не вдалося знайти функцію "%>%"

Я не розумію, яка користь від використання цього спеціального оператора %>%, і будь-який відгук був би чудовим.



Я отримую суперечливі результати на основі відповідей. Це не вдається 8 з 10 разів, але потім працює нормально.
Шон

Відповіді:


128

Вам потрібно завантажити пакет (наприклад, magrittrабо dplyr), який визначає функцію спочатку, а потім він повинен працювати.

install.packages("magrittr") # package installations are only needed the first time you use it
install.packages("dplyr")    # alternative installation of the %>%
library(magrittr) # needs to be run every time you start R and want to use %>%
library(dplyr)    # alternatively, this also loads %>%

Оператора конвеєрів %>%було введено для того, щоб "зменшити час розробки та покращити читабельність та ремонтопридатність коду".

Але кожен повинен вирішити сам, чи це дійсно відповідає його робочому процесу та полегшує ситуацію. Для отримання додаткової інформації magrittrнатисніть тут .

Не використовуючи трубу %>% , цей код поверне те саме, що і ваш код:

words <- colnames(as.matrix(dtm))
words <- words[nchar(words) < 20]
words

EDIT: (Я продовжую свою відповідь через дуже корисний коментар, зроблений @Molx)

Незважаючи на те, що він із magrittr, оператор труби частіше використовується з пакетом dplyr(що вимагає та завантажує magrittr), тому кожного разу, коли ви бачите, що хтось використовує, %>%переконайтеся, що ви не повинні завантажувати його dplyr .


Також ви маєте на увазі, що написаний вище код міг бути написаний по-іншому без потреби використовувати%>%
Хайдар

9
Незважаючи на те, що він із magrittr, оператор труби частіше використовується з пакетом dplyr(що вимагає та завантажує magrittr), тому кожного разу, коли ви бачите, що хтось використовує, %>%переконайтеся, що ви не повинні завантажувати його dplyr.
Molx

1
Я хотів би наголосити, що лише завантаження Tidyverse ( library(tidyverse)) може бути недостатньо. Я додав ( library(dplyr)) після, library(tidyverse)а потім %>%був знайдений.
RikH

15

У Windows: якщо ви використовуєте%>% всередині циклу% dopar%, вам потрібно додати посилання на пакет завантаження dplyr(або magrittr, якийdplyr завантажується).

Приклад:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}

Якщо ви опустите .packagesкоманду і %do%замість цього скористаєтеся для того, щоб це все працювало в одному процесі, тоді це буде добре Причина в тому, що все це працює в одному процесі, тому не потрібно спеціально завантажувати нові пакети.


1
Це хороший момент, який варто підкреслити конкретно стосовно foreach. У мене раніше були проблеми з цим, і це інша проблема, ніж вирішена прийнятою відповіддю.
Michael Barton

Я не впевнений, що це правильне місце, щоб це також виділити, але я пропонував та редагував на основі пакету ітераторів, який спрощує цикл foreach. Не соромтеся ігнорувати, якщо це недоречно.
Michael Barton

1
Дякую. Врятував мене. Я не уявляв, що мені потрібно оголосити про залежності в foreach.
Jim G.

0

можна використовувати наступне:

 install.packages("data.table")
 library(data.table)

неправильна відповідь imho - це не визначає функцію "%>%". Додавши ці два рядки, я все одно отримую те саме:could not find function "%>%"
tchevrier

0

Перевага полягає в тому, що використовується результат попередньої функції. Не потрібно повторювати, звідки походить джерело даних, наприклад.


Будь ласка, поставте це як коментар. Дякую.
jess
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.