Definieren von globalen Variablen mit der Funktion argument in R
Ich versuche zu schreiben, eine Funktion in R, die Tropfen Spalten vom data-frame und gibt die neuen Daten mit einem angegebenen Namen als argument der Funktion:
drop <- function(my.data,col,new.data) {
new.data <<- my.data[,-col]
return(new.data)
}
So, in obigem Beispiel möchte ich eine neue Daten-frame zu existieren, nachdem die Funktion aufgerufen wird, die mit dem Namen was der Benutzer eingibt, wie das Dritte argument.
Mir beim Aufruf der Funktion die richtigen Daten-frame zurückgegeben wird, aber wenn ich dann versuche, die neue Daten-frame im globalen Umfeld bekomme ich object not found
. Ich dachte, dass durch die Verwendung der <<-
Betreiber ich war die Definition new.data
weltweit.
Kann mir jemand helfen zu verstehen was Los ist und ob es einen Weg gibt, dies zu erreichen?
Fand ich diese und diese schien verwandt, aber weder wirklich meine Frage beantwortet.
- Sie konnte
assign(new.data, mydata[,-col], envir = .GlobalEnv)
obwohl ich würde empfehlen, gegen diese ganze Idee - Es sieht aus wie Ihre Funktion erfordert mehr Tipparbeit, als explizit tun, damit der Anruf direkt. Was ist der Punkt? Auch die Zuordnung von Dingen über
<<-
innerhalb einer Funktion ist schrecklich Praxis. - Sie versuchen zu schreiben eine Funktion mit einem Nebeneffekt. R ist eine funktionale Sprache und funktioniert daher sollte keine Nebenwirkungen haben.
- ah gut zu wissen, dass <<- sollte nicht verwendet werden, die in einer Funktion - danke. Meine eigentliche Funktion ist mehr als das, ich war nur mit diesem als ein einfaches Beispiel. Es hat sparen eine Menge Tipparbeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
assign()
Funktion.Das erste argument sollte eine Zeichenkette sein. In diesem Fall wird die resultierende Globale variable mit dem Namen "neu.Daten". Wenn
new.data
ist der name selbst, fallen die Zitate aus dem Aufruf der Funktion.<<-
nicht immer, weisen Sie der globalen Umwelt.Im Allgemeinen ist es jedoch besser, die Dinge zurückkehren von einer Funktion als Globale Variablen innerhalb einer Funktion. Letzteres ist viel schwieriger zu Debuggen.
return
.Einen Grund zu brauchen, das ist bei der Arbeit viel mit dem RStudio-Konsole zum ausführen viel text mining. Zum Beispiel, wenn Sie ein großes corpus, und Sie möchten, um Sie zu brechen bis in den sub-corpi auf der Basis von Themen, der die Verarbeitung durchführt, als Funktion und Rückgabe eines gereinigten Korpus viel schneller sein können. Ein Beispiel ist unten:
Im obigen Fall, ich geben Sie die Spalte, aus der Daten-frame als
inputText
und die gewünschte Ausgabe-corpus alscorpName
. Dies ermöglicht die einfache Aufgabe des folgenden Prozesses eine Reihe von text-Daten:Dann das neue corpus "retailCorp" zeigt sich in der globalen Umwelt für die weitere Arbeit wie zeichnen word clouds, etc. Ich kann auch senden Sie die Listen durch die Funktion und bekommen viel corpi zurück.