2013-08-15 13 views
5

Czytałem funkcjonalności od github. Jedną z sugestii na stronie było użycie call_function, jeśli pracuje się z listą funkcji. Oto kod ze strony:programowanie funkcjonalne w R

call_fun <- function(f, ...) f(...) 
f <- list(sum, mean, median, sd) 
lapply(f, call_fun, x = runif(1e3)) 

Wyjście został opublikowany jako:

# [[1]] 
# [1] 498 
# 
# [[2]] 
# [1] 0.498 
# 
# [[3]] 
# [1] 0.49 
# 
# [[4]] 
# [1] 0.29 

Jednak nie był w stanie powtórzyć powyższe wyniki. Wystąpił błąd:

Error in FUN(X[[4L]], ...) : could not find function "f" 

Czy brakuje mi tutaj czegoś?

Odpowiedz

5

Masz nowo funkcję sd:

sd = 2 

call_fun <- function(f, ...) f(...) 
f <- list(sum, mean, median, sd) 
lapply(f, call_fun, x = runif(1e3)) 
#Error in FUN(X[[4L]], ...) : could not find function "f" 

ponownego uruchomienia sesji czy rm(sd).

+0

Dzięki @eddi. Nie jestem pewien, czy moje pytanie przyda się przyszłym użytkownikom. Z chęcią usuwam, jeśli wydaje się to banalne. – Metrics

+3

Nie jestem pewien, czy możesz go usunąć. Ma już upvote (moje) i przegrywa na odpowiedź (moja i druga). Wciąż jestem ciekawy, czy istnieje programowy sposób na rozwiązanie tego problemu. Wypróbowałem 'call_fun <- function (f, ...) match.fun (f) (...)', które powiedzie się w prostym przypadku i nie powiedzie się w ten sam sposób z 'sd == 5' w środowisku. –

+1

@Metrics Napadłem na ten sam problem wcześniej z 'sd' (jest tylko tyle dwuliterowych nazw zmiennych), więc prawdopodobnie nie jest to zbyt częste pomyłka (nie jest to takie pewne, chociaż można znaleźć to pytanie przez wyszukiwarka) – eddi

Powiązane problemy