Puzzle für die R cognoscenti auswertet: Sagen wir einen Datenrahmen haben:Wie eine R-Funktion zu schreiben, die einen Ausdruck in einem Datenrahmen
df <- data.frame(a = 1:5, b = 1:5)
Ich weiß, dass wir Dinge wie
with(df, a)
tun können
um einen Vektor der Ergebnisse zu erhalten.
Aber wie schreibe ich eine Funktion, die einen Ausdruck (wie a
oder a > 3
) nimmt und das Gleiche tut innen. I.e. Ich möchte eine Funktion fn
schreiben, die einen Datenrahmen und einen Ausdruck als Argumente nimmt und das Ergebnis der Auswertung des Ausdrucks "innerhalb" des Datenrahmens als eine Umgebung zurückgibt.
Es macht nichts, dass dies künstlich klingt (ich könnte einfach with
wie oben verwenden), aber das ist nur eine vereinfachte Version einer komplexeren Funktion, die ich schreibe. Ich versuchte mehrere Varianten (unter Verwendung eval
, with
, envir
, substitute
, local
, usw.), aber keiner von ihnen funktioniert. Zum Beispiel, wenn ich definieren fn
wie so:
fn <- function(dat, expr) {
eval(expr, envir = dat)
}
ich diesen Fehler:
> fn(df, a)
Error in eval(expr, envir = dat) : object 'a' not found
Klar bin ich etwas fehlt subtil über Umgebungen und Auswertung. Gibt es eine Möglichkeit, eine solche Funktion zu definieren?
Es gibt Abschnitt auf [Hadleys Wiki zu diesem Thema] (https: // github.com/hadley/devtools/wiki/Evaluation) – Marek
@Marek das ist eine gute Referenz zu lesen, danke! –
Ist diese Seite immer noch zugänglich? –