2015-05-14 4 views
17

Я бегу пример в R, проходя через шаги, и все работает до сих пор для этого кода, кроме выдает ошибку:Ошибка: не удалось найти функцию «%>%»

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

Error: could not find function "%>%"

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

+0

Связанный: http://stackoverflow.com/questions/27125672/what-does-function-mean-in-r – LJW

ответ

35

Сначала вам необходимо установить пакет magrittr, затем он должен работать.

install.packages("magrittr") 
library(magrittr) 

Труба оператор %>% был введен в «время разработки снижения и улучшить читабельность кода.»

Но каждый должен решить для себя, если он действительно подходит для его рабочего процесса и упрощает работу. Для получения дополнительной информации о magrittr, нажмите here.

Не используя трубу %>%, этот код будет возвращать то же самое, как ваш код:

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

EDIT: (я простирающийся мой ответ из-за очень полезный комментарий что было сделано @Molx)

Despite being from magrittr , the pipe operator is more commonly used with the package dplyr (which requires and loads magrittr), so whenever you see someone using %>% make sure you shouldn't load dplyr instead.

+0

Также вы имеете в виду, что написанный выше код может быть написан по-разному, без использования% % – Haidar

+9

Несмотря на то, что оператор 'magrittr', оператор трубы чаще используется с пакетом' dplyr' (который требует и загружает 'magrittr'), поэтому всякий раз, когда вы видите, что кто-то использует'%>% ', убедитесь, что вы не должны загружать 'dplyr' вместо этого. – Molx

5

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

Пример:

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

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

+0

Это хороший момент и стоит выделить конкретно по отношению к foreach. У меня были проблемы в прошлом с этим, и это другая проблема для решения, принятого принятым ответом. –

+0

Я не уверен, что это подходящее место, чтобы подчеркнуть это, но я предложил и отредактировал на основе пакета итераторов, который упрощает цикл foreach. Не стесняйтесь пренебрегать, если это неуместно. –

+1

Спасибо. Сохранял меня. Я понятия не имел, что мне нужно объявлять зависимости в 'foreach'. –

 Смежные вопросы

  • Нет связанных вопросов^_^