Ошибка: не удалось найти функцию "%>%"

Я запускаю пример на R, прохожу шаги и все работает до сих пор, за исключением этого кода выдает ошибку:

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

Ошибка: не удалось найти функцию "%>%"

Я не понимаю, в чем преимущество использования этого специального оператора %>%, и любая обратная связь была бы полезной.

Ответы

Ответ 1

Вам необходимо загрузить пакет (например, 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, оператор pipeопровода используется чаще с пакетом dplyr (который требует и загружает magrittr), так всякий раз, когда вы видите кого-то, использующего %>%, убедитесь, что вы не должны загружать dplyr вместо.

Ответ 2

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

Пример:

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

Если вы опустите команду .packages и используйте %do% вместо этого, чтобы все это выполнялось в одном процессе, тогда работает нормально. Причина в том, что все работает в одном процессе, поэтому нет необходимости специально загружать новые пакеты.

Ответ 3

можно использовать следующее:

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