Головоломка для R cognoscenti: скажем, у нас есть фрейм данных:
df <- data.frame( a = 1:5, b = 1:5 )
Я знаю, что мы можем сделать что-то вроде
with(df, a)
, чтобы получить вектор результатов.
Но как мне написать функцию, которая принимает выражение (например, a
или a > 3
) и делает то же самое внутри.Т.е. я хочу написать функцию fn
, которая принимает фрейм данных и выражение в качестве аргументов и возвращает результат оценки выражения «внутри» фрейма данных как среды.
Не берите в голову, что это звучит надуманно (я мог бы просто использовать with
, как указано выше), но это просто упрощенная версия более сложной функции, которую я пишу.Я пробовал несколько вариантов (используя eval
, with
, envir
, substitute
, local
и т. Д.), Но ни один из них не работает.Например, если я определяю fn
следующим образом:
fn <- function(dat, expr) {
eval(expr, envir = dat)
}
Я получаю эту ошибку:
> fn( df, a )
Error in eval(expr, envir = dat) : object 'a' not found
Очевидно, что мне не хватает чего-то тонкого в окружении и оценке.Есть ли способ определить такую функцию?