2013-08-15 14 views
5

İşlevselleri github'dan okuyordum. Sayfadaki bir öneri, bir işlev listesiyle çalışıyorsa call_function kullanmaktı. Çıktı olarak gönderilmişişlevsel programlama R

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

: Burada sayfadan kodudur Ancak

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

, yukarıdaki sonuçlar çoğaltmak mümkün değildi. Hata var:

Burada bir şey mi eksik?

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" 
oturumunuzu yeniden başlatın veya rm(sd) yapmak

:

cevap

5

Sen fonksiyonunu sd yeniden belirlediler.

+0

Teşekkürler @eddi. Sorunun gelecekteki kullanıcılar için yararlı olup olmayacağından emin değilim. Önemsiz görünüyorsa silmek için mutlu olacak. – Metrics

+3

Eminim onu ​​silebilirsin. Zaten cevabın (mayın) ve cevabın üzerinde (benim ve anothers) yükseltmeler var. Sorunu çözecek programlı bir yol varsa merak ediyorum. Call_fun <- function (f, ...) match.fun (f) (...) 'yi denedim ve basit durumda başarılı olur ve sd == 5' ile aynı şekilde başarısız olur. –

+1

@Metrics 'sd' ile daha önce bu aynı soruna girdim (sadece iki harfli değişken isimler var), bu yüzden muhtemelen bir hatadan çok nadir değildir (bu sorunun arama motoru) – eddi