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