Использование `With` внутри функции (оболочки)

Я хотел бы написать оболочку для пользовательской функции, которая принимает некоторые векторы в качестве входных данных (например: mtcars $ hp , mtcars $ am и т. Д.) Для ввода в качестве имени фрейма данных (как параметр data , например: mtcars ) и имен переменных (например: hp и am ), как обычно в большинстве стандартных функций.

Но у меня есть некоторые проблемы, моя предложенная «демонстрационная» функция (оболочка вокруг означает, что не работает.

Код:

f <- function(x, data=NULL) {
    if (!missing(data)) {
        with(data, mean(x))
    } else {
        mean(x)
    }
}

Работа с вектором, конечно, работает:

> f(mtcars$hp)
[1] 146.69

Но с , к сожалению, не работает:

> f(hp, mtcars)
Error in with(d, mean(x)) : object 'hp' not found

Хотя в глобальной среде / без моей пользовательской функции работает правильно:

> with(mtcars, mean(hp))
[1] 146.69

Я попытался провести некоторый эксперимент с заменить , deparse ] и другие, но безуспешно. Любые подсказки приветствуются!

5
задан skaffman 5 December 2011 в 20:39
поделиться