Puzzle per intenditori R: Supponiamo di avere un data-frame:Come scrivere una funzione R che valuta l'espressione all'interno di un data-frame
df <- data.frame(a = 1:5, b = 1:5)
So che possiamo fare le cose come
with(df, a)
per ottenere un vettore di risultati.
Ma come faccio a scrivere una funzione che prende un'espressione (come a
o a > 3
) e fa la stessa cosa dentro. Cioè Voglio scrivere una funzione fn
che accetta un quadro dati e un'espressione come argomenti e restituisce il risultato della valutazione dell'espressione "all'interno" del frame dei dati come ambiente.
Non importa se questo sembra forzato (potrei semplicemente usare with
come sopra), ma questa è solo una versione semplificata di una funzione più complessa che sto scrivendo. Ho provato diverse varianti (usando eval
, with
, envir
, substitute
, local
, ecc.) Ma nessuna di queste funzioni. Per esempio, se io definisco fn
in questo modo:
fn <- function(dat, expr) {
eval(expr, envir = dat)
}
ottengo questo errore:
> fn(df, a)
Error in eval(expr, envir = dat) : object 'a' not found
Chiaramente mi manca qualcosa di sottile sugli ambienti e valutazione. C'è un modo per definire una funzione del genere?
C'è una sezione su [wiki di Hadley su questo argomento] (https: // github.com/hadley/devtools/wiki/Evaluation) – Marek
@Marek è un ottimo riferimento da leggere, grazie! –
Questa pagina è ancora accessibile? –