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
substitute()
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:
column
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ürsubstitute
Gebrauch machen vonformula()
undmatch.call()
, mit denen ich beide nicht viel Erfahrung habe. Unterfrage: Istdo.call()
bevorzugt gegenübereval()
?