2015-05-14 7 views
17

Ich bin ein Beispiel in R ausgeführt wird, die Schritte durchlaufen und alles funktioniert so weit außer für diesen Code erzeugt einen Fehler:Fehler: konnte nicht gefunden Funktion „%>%“

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

Error: could not find function "%>%"

Ich verstehe nicht, was der Vorteil der Verwendung dieser speziellen Operator %>% ist, und jede Rückmeldung wäre toll.

+0

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

Antwort

35

Sie müssen zuerst das Paket magrittr installieren, dann sollte es funktionieren.

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

Der Rohr Operator %>%-eingeführt wurde „decrease Entwicklungszeit und die Lesbarkeit und Wartbarkeit des Codes zu verbessern.“

Aber jeder muss selbst entscheiden, ob es wirklich zu seinem Workflow passt und die Dinge einfacher macht. Klicken Sie für weitere Informationen zu magrittr auf here.

Nicht das Rohr mit %>%, dieser Code würde das gleiche wie Sie Ihren Code zurück:

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

EDIT: (ich erstreckt meine Antwort wegen eines sehr nützlichen Kommentar das wurde von @Molx gemacht)

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

Auch meinst du, der oben geschriebene Code könnte auf andere Weise geschrieben werden, ohne die Notwendigkeit,%> zu verwenden % – Haidar

+9

Trotz der Verwendung von 'magrtrtr' wird der Pipe-Operator häufiger mit dem Paket' dplyr' verwendet (das 'magritrtr' erfordert und lädt). Wenn Sie also jemanden sehen, der'%>% 'verwendet, sollten Sie nicht laden 'dplyr' stattdessen. – Molx

5

Unter Windows: Wenn Sie%>% in einer% dopar% -Schleife verwenden, müssen Sie eine Referenz zum Ladepaket dplyr (oder magrittr, die dplyr lädt) hinzufügen.

Beispiel:

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

Wenn Sie den .packages Befehl weglassen, und verwenden %do% stattdessen es laufen alle in einem einzigen Prozess zu machen, dann funktioniert gut. Der Grund dafür ist, dass alles in einem Prozess ausgeführt wird, sodass keine neuen Pakete geladen werden müssen.

+0

Dies ist ein guter Punkt und lohnt sich speziell in Bezug auf foreach hervorzuheben. Ich hatte in der Vergangenheit Probleme damit und es ist ein anderes Problem als das, das durch die angenommene Antwort gelöst wurde. –

+0

Ich bin nicht sicher, ob dies der richtige Ort ist, um dies auch hervorzuheben, aber ich habe vorgeschlagen und bearbeitet basierend auf dem Iteratoren-Paket, das die foreach-Schleife vereinfacht. Fühlen Sie sich frei zu ignorieren, wenn dies unangemessen ist. –

+1

Danke. Rettete mich. Ich hatte keine Ahnung, dass ich die Abhängigkeiten in der 'foreach' deklarieren musste. –

Verwandte Themen