Несколько иной подход, позволяющий выбрать функции для возврата.
Код:
fooapply <- function(x, functions = c("mean", "median", "sd"), na.rm = T){
func <- functions
vec <- c()
for(i in 1:length(func)){
if(na.rm == T){
eval(parse(text = paste0("vec[", i,"]", "<-", func[i], "(x, na.rm = T)")))
}
else{
eval(parse(text = paste0("vec[", i,"]", "<-", func[i], "(x)")))
}
}
names(vec) <- functions
return(vec)
}
Результат
Чтобы получить желаемый результат, вы можете просто добавить свой вектор в функцию. По умолчанию функция пропускает NA и вычисляет среднее значение, медиану и sd.
fooapply(Tail_wags)
mean median sd
8.727273 12.000000 6.497552
Кроме того, можно также добавлять или удалять функции или заменять их:
fooapply(Tail_wags, c("mean", "median", "IQR"))
Примечаниечто некоторые из включенных функций сообщат об ошибке, когда NA включены без указания na.rm = T
, другие просто сообщат NA как результат. Например, функция mean()
будет возвращать NA при расчете для вектора, который включает NA. Напротив, IQR()
выдаст ошибку, когда NA включены в вектор и, следовательно, для работы fooapply()
требуется оператор na.rm = T
(который по умолчанию установлен в TRUE).