Manipulation Ich habe gerade angefangen mit R arbeiten meine Datenmanipulation und Analyse nach Jahren der Verwendung IgorPro zu tun, die niemand in ihrem rechten Verstand so viel Zeit mit dem Schreiben Skripte in verbringen würde, wie ich habe. Es gibt jedoch eine konzeptionelle Diskrepanz zwischen den beiden, die mir Probleme bereitet.Schreibfunktionen für Datenrahmen in R
Ich möchte eine Funktion schreiben, die jede Spalte in einem Datenframe nehme ich füttere es und skaliere es von 0 bis 1. Das kritische Ding hier ist, dass ich die skalierten Daten im Datenrahmen aufwickeln will. In meinem IgorPro Rahmen des Geistes ist, so einfach:
normalize<-function(col){
col<-col/min(col)
}
Wenn ich in testdf$testcol
setzen, und das Ergebnis auszudrucken, das hat funktioniert, aber die Ergebnisse sind nicht in den Datenrahmen eingebaut. Ein wenig Forschung legt nahe, dass dies daran liegt, dass meine Funktion in einer lokalen Umgebung existiert, und um Dinge außerhalb der lokalen Umgebung zu modifizieren, muss sie mit der globalen Umgebung verbunden sein.
Modifiziert:
normalize<-function(col){
col<-col/min(col)
assign("col",col,envir=.GlobalEnv)
}
Aber natürlich dies nur spuckt einen neuen Vektor col
genannt und mich nicht in meinem Bestreben helfen, die nicht skalierte Daten zu überschreiben.
Kurzes Neuzuweisen des Spaltennamens zu den neu skalierten Daten, was den Punkt, eine Funktion dafür zu schreiben, zunichte macht, wie kann ich die Funktionsausgabe mithilfe der Argumente in der Funktion tatsächlichen Datenrahmen zuweisen?
Schlussbemerkung: Ich schätze jede Eingabe, die die Verwendung von Paketen beinhaltet, die dies für mich tun würden, aber ich habe viel mehr Datenmanipulation zu tun, und ich würde gerne meine eigenen Funktionen schreiben können finde Pakete für alles, also Bonuspunkte, wenn du mir helfen kannst, zu verstehen, wie ich die Funktion selbst schreibe, anstatt mich auf andere eingebaute Funktionen zu verweisen.
Sie den gesamten Datenrahmen und den Spaltenindex (oder der Name) an die Funktion übergeben konnte, und führen Sie die Berechnung – Barranka
Ihre 'normalize' Funktion werden Ihre Daten nicht auf [0,1] skalieren, sondern auf [1, infinity] –
Sie scheinen bezüglich der Semantik "Pass-by-Reference" und "Pass-by-Value" verwirrt zu sein. [R geht nicht per Referenz] (http://stackoverflow.com/questions/2603184/r-pass-by-reference) –