2015-05-14 12 views
17

biegnę przykład w dziedzinie badań, przechodząc przez kolejne etapy i wszystko działa tak daleko z wyjątkiem tego kodu powoduje błąd:Błąd: nie można odnaleźć funkcji „%>%”

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

Error: could not find function "%>%"

nie rozumiem, co korzyści wynikające z zastosowania tego szczególnego operatora %>% jest, a wszelkie informacje zwrotne byłoby świetnie.

+0

Powiązane: http://stackoverflow.com/questions/27125672/what-does-function-mean-in-r – LJW

Odpowiedz

35

Musisz zainstalować pakiet magrittr pierwszy, to powinno działać.

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

Rura operatora %>% wprowadzono do „zmniejszenie czasu rozwoju i poprawy czytelności i konserwacji kodu”.

Ale każdy musi sam decydować, czy to naprawdę pasuje do jego pracę i sprawia, że ​​rzeczy łatwiejsze. Więcej informacji na temat magrittr, kliknij here.

Nie stosując rurę %>% ten kod wróci takie samo jak kod:

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

EDIT: (mam rozszerzenie moją odpowiedź z powodu bardzo użyteczny komentarz wykonane przez @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

Również masz na myśli kod napisany powyżej może być napisany w inny sposób bez potrzeby korzystania z%> % – Haidar

+9

Mimo że od 'magrittr' operator rura jest powszechnie stosowany w pakiecie' dplyr' (co wymaga i ładuje 'magrittr'), więc gdy widzisz kogoś używając'%>% 'upewnij się, że nie należy załadować zamiast tego 'dplyr'. – Molx

5

W systemie Windows: jeśli używasz%>% wewnątrz% dopar% pętli, trzeba dodać odwołanie do ładowania pakietu dplyr (lub magrittr, który dplyr ładunki).

Przykład:

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

Jeśli pominąć komendy .packages i używać %do% zamiast zrobić to wszystko prowadzony w jednym procesie, a następnie działa dobrze. Powodem jest to, że wszystko działa w jednym procesie, więc nie trzeba specjalnie ładować nowych pakietów.

+0

Jest to dobry punkt i warto podkreślić, szczególnie w odniesieniu do foreach. W przeszłości miałem z tym problemy i jest to inny problem niż rozwiązany przy pomocy zaakceptowanej odpowiedzi. –

+0

Nie jestem pewien, czy jest to właściwe miejsce do podkreślenia tego również, ale zasugerowałem i edytowałem na podstawie pakietu iteratorów, który upraszcza pętlę foreach. Nie przejmuj się, jeśli jest to niewłaściwe. –

+1

Dzięki. Uratował mnie. Nie miałem pojęcia, że ​​muszę zadeklarować zależności w "foreach". –

Powiązane problemy