Ich bin mir sicher, dass die Frage etwas dumm ist (sorry) ... Ich versuche, eine Funktion mit verschiedenen Variablen zu erstellen, die ich in einem Datenrahmen gespeichert habe. Die Funktion ist wie folgt:
mlr_turb <- function(Cond_in, Flow_in, pH_in, pH_out, Turb_in, nm250_i, nm400_i, nm250_o, nm400_o){
Coag = (+0.032690 + 0.090289*Cond_in + 0.003229*Flow_in - 0.021980*pH_in - 0.037486*pH_out
+0.016031*Turb_in -0.026006*nm250_i +0.093138*nm400_o - 0.397858*nm250_o - 0.109392*nm400_o)/0.167304
return(Coag)
}
m4_turb <- mlr_turb(dataset)
Das Problem ist, wenn ich versuche, meine Funktion in einem Datenrahmen (mit demselben Namen von Variablen) auszuführen. Es erkennt meine Variablen nicht und zeigt diese Meldung an:
Error in mlr_turb(dataset) :
argument "Flow_in" is missing, with no default
Tatsächlich gibt es aber auch alle Variablen.
Ich glaube, ich habe eine falsche Reihenfolge in der Funktion, die es ermöglicht, die Variablen aus dem Datensatz zu übernehmen. Ich habe viel darüber gesucht, aber keine Antwort gefunden ...
Beim Schreiben tritt ein Standardproblem auf, R
das mit der Frage von standard evaluation
(SE) vs non standard evaluation
(NSE) zusammenhängt. Wenn Sie mehr Elemente benötigen, können Sie sich diesen Blog-Beitrag ansehen, den ich geschrieben habe
Ich denke, der bequemste Weg, eine Funktion mit Variablen zu schreiben, besteht darin, Variablennamen als Argumente für die Funktion zu verwenden.
Nehmen wir noch einmal das @ Myon-Beispiel.
# a simple function that takes x, y and z as arguments
myFun <- function(x, y, z){
result <- (x + y)/z
return(result)
}
Die Frage ist, wo R
die Werte hinter den Namen zu finden sind x
, y
und z
. In einer Funktion, R
wird zunächst in der Funktion Umgebung suchen (hier x
, y
und z
als Parameter definiert ist ) , dann wird es im globalen Umfeld aussieht und dann wird es an den verschiedenen Paketen aussieht angebracht.
In myFun
, R
erwartet Vektoren. Wenn Sie einen Spaltennamen angeben, wird ein Fehler angezeigt. Was passiert, wenn Sie einen Spaltennamen angeben möchten? Sie müssen sagen, R
dass der von Ihnen angegebene Name einem Wert im Bereich eines Datenrahmens zugeordnet werden sollte. Sie können zum Beispiel so etwas tun:
myFun <- function(df, col1 = "x", col2 = "y", col3 = "z"){
result <- (df[,col1] + df[,col2])/df[,col3]
return(result)
}
In diesem Aspekt können Sie mit data.table
package noch viel weiter gehen . Wenn Sie Funktionen schreiben, die Variablen aus einem Datenrahmen verwenden müssen, empfehlen wir Ihnen, sich dieses Paket anzusehen
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen