Geben Sie einen Spaltennamen für data.frame an eine Funktion @ weite

Ich versuche eine Funktion zu schreiben, um einen data.frame zu akzeptieren x) und eincolumn davon. Die Funktion führt einige Berechnungen für x durch und gibt später einen anderen data.frame zurück. Ich halte mich an die Best-Practices-Methode, um den Spaltennamen an die Funktion zu übergeben.

Die zwei minimalen Beispielefun1 undfun2 unten erzeugt das gewünschte Ergebnis und kann Operationen an @ ausführx$column mitmax() als Beispiel. Allerdings verlassen sich beide auf das scheinbar (zumindest für mich) unelegante

Aufrufsubstitute() und möglicherweiseeval()die Notwendigkeit, den Spaltennamen als Zeichenvektor zu übergeben.

fun1 <- function(x, column){
  do.call("max", list(substitute(x[a], list(a = column))))
}

fun2 <- function(x, column){
  max(eval((substitute(x[a], list(a = column)))))
}

df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")

Ich möchte die Funktion als @ aufrufen könnfun(df, B), zum Beispiel. Andere Optionen, die ich in Betracht gezogen, aber noch nicht ausprobiert habe:

Bestehencolumn als Ganzzahl der Spaltennummer. Ich denke das würde @ vermeidsubstitute(). Im Idealfall könnte die Funktion entweder akzeptieren.with(x, get(column)), aber selbst wenn es funktioniert, denke ich, dass dies noch @ erfordern würsubstituteGebrauch machen vonformula() undmatch.call(), mit denen ich beide nicht viel Erfahrung habe.

Unterfrage: Istdo.call() bevorzugt gegenübereval()?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage