Я хотел бы написать оболочку для пользовательской функции, которая принимает некоторые векторы в качестве входных данных (например: 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
] и другие, но безуспешно. Любые подсказки приветствуются!