Chciałbym napisać wrapper wokół niestandardowej funkcji, która pobiera kilka wektorów jako dane wejściowe (jak: mtcars$hp
, mtcars$am
itp.) Do podjęcia danych wejściowych jako nazwa ramki danych (jako parametr data
, np .: mtcars
) i nazwy zmiennych (jak: hp
i am
), jak zwykle w większości standardowych funkcji.`Z` użycie wewnątrz funkcji (opakowanie)
Ale mam pewne problemy, mój zaproponował funkcja 'demo' (owinięcie wokół mean
nie działa
kod:.
f <- function(x, data=NULL) {
if (!missing(data)) {
with(data, mean(x))
} else {
mean(x)
}
}
Running przeciwko robót wektora kursu:
> f(mtcars$hp)
[1] 146.69
Ale with
nie powiodło się niestety:
> f(hp, mtcars)
Error in with(d, mean(x)) : object 'hp' not found
Choć w globalnym środowisku/bez mój zwyczaj funkcja działa prawo:
> with(mtcars, mean(hp))
[1] 146.69
Próbowałem zrobić jakiś eksperyment z substitute
, deparse
i innych, ale bez powodzenia. Każda wskazówka byłaby mile widziany!
Zobacz artykuł na temat @Hadley Wickham na stronie: https://github.com/hadley/devtools/wiki/Evaluation – Andrie
Czy nie powinno to być 'f (hp, mtcars)'? – James
Inną opcją, którą możesz chcieć zbadać, jest użycie formuły, więc nazwałbyś ją nieco inaczej - foo (~ hp, mtcars) - a następnie użyj rzeczy takich jak model.frame, aby uzyskać wartości. – Spacedman