Fehler: Funktion "%>%" konnte nicht gefunden werden


79

Ich führe ein Beispiel in R aus, gehe die Schritte durch und alles funktioniert bis jetzt, außer dass dieser Code einen Fehler erzeugt:

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

Fehler: Funktion "%>%" konnte nicht gefunden werden

Ich verstehe nicht, welchen Nutzen die Verwendung dieses speziellen Operators %>%hat, und jedes Feedback wäre großartig.



Ich erhalte inkonsistente Ergebnisse basierend auf den Antworten. Es schlägt 8 von 10 Mal fehl, läuft dann aber gut.
Shawn

Antworten:


124

Sie müssen zuerst ein Paket (wie magrittroder dplyr) laden , das die Funktion definiert, dann sollte es funktionieren.

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 %>%

Der Pipe-Betreiber %>%wurde eingeführt, um "die Entwicklungszeit zu verkürzen und die Lesbarkeit und Wartbarkeit von Code zu verbessern".

Aber jeder muss selbst entscheiden, ob es wirklich zu seinem Workflow passt und die Dinge einfacher macht. Weitere Informationen zu magrittrfinden Sie hier .

Wenn Sie die Pipe nicht verwenden %>%, gibt dieser Code den gleichen Code zurück wie Ihr Code:

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

EDIT: (Ich erweitere meine Antwort aufgrund eines sehr nützlichen Kommentars von @Molx)

Obwohl magrittrder Pipe-Operator von stammt, wird er häufiger mit dem Paket verwendet dplyr(das erfordert und lädt magrittr). Wenn Sie also jemanden sehen, der es verwendet, %>%stellen Sie sicher, dass Sie nicht dplyr stattdessen laden .


Meinen Sie auch, dass der oben geschriebene Code auf andere Weise geschrieben werden könnte, ohne dass%>%
Haidar

9
Obwohl magrittrder Pipe-Operator von stammt, wird er häufiger mit dem Paket verwendet dplyr(das erfordert und lädt magrittr). Wenn Sie also jemanden sehen, der es verwendet, %>%stellen Sie sicher, dass Sie nicht dplyrstattdessen laden .
Molx

1
Ich möchte betonen, dass das Laden von Tidyverse ( library(tidyverse)) möglicherweise nicht ausreicht. Ich habe nach ( library(dplyr)) hinzugefügt library(tidyverse)und wurde dann %>%gefunden.
RikH

15

Unter Windows: Wenn Sie%>% in einer% dopar% -Schleife verwenden, müssen Sie einen Verweis auf das Ladepaket hinzufügen dplyr(oder auf magrittrwelches dplyrLadeprogramm).

Beispiel:

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

Wenn Sie den .packagesBefehl weglassen und %do%stattdessen verwenden, um alles in einem einzigen Prozess auszuführen, funktioniert dies einwandfrei. Der Grund dafür ist, dass alles in einem Prozess ausgeführt wird, sodass keine neuen Pakete speziell geladen werden müssen.


1
Dies ist ein guter Punkt und besonders in Bezug auf foreach hervorzuheben. Ich hatte in der Vergangenheit Probleme damit und es ist ein anderes Problem als das, das durch die akzeptierte Antwort gelöst wurde.
Michael Barton

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

1
Vielen Dank. Rettete mich. Ich hatte keine Ahnung, dass ich die Abhängigkeiten in der deklarieren musste foreach.
Jim G.


0

Der Vorteil ist, dass die Ausgabe der vorherigen Funktion verwendet wird. Sie müssen beispielsweise nicht wiederholen, woher die Datenquelle stammt.


Bitte setzen Sie dies als Kommentar. Vielen Dank.
Jess
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.