2015-10-27 10 views
5

Chcę wypakować nazwę używanej funkcji z błędu. Więc gdybym miał:Funkcja, której używasz w błędzie (z połączenia)

mean(letters) 
"P" * 5 

chciałbym wyodrębnić "mean.default" i "*". Mogę odebrać wywołanie z błędu w następujący sposób:

capturer <- function(x){ 
    tryCatch({ 
     x 
    }, warning = function(w) { 
     w 
    }, error = function(e) { 
     e 
    }) 
} 

capturer(mean(letters))$call 
## mean.default(letters) 

capturer("P" * 5)$call 
## "P" * 5 

Ale nie ma sposobu na pobranie nazw funkcji.

Odpowiedz

8

Możesz pobrać nazwę nazwy funkcji za pomocą $call[[1]]. Możemy również dodać argument deparse, aby dodać opcję zwracania wyniku w postaci ciągu.

capturer <- function(x, deparse = FALSE) { 
    out <- tryCatch({ 
     x 
    }, warning = function(w) { 
     w$call[[1]] 
    }, error = function(e) { 
     e$call[[1]] 
    }) 
    if(deparse) deparse(out) else out 
} 

## these return a call 
capturer("P" * 5) 
# `*` 
capturer(mean(letters)) 
# mean.default 

## these return a character 
capturer("P" * 5, deparse = TRUE) 
# [1] "*" 
capturer(mean(letters), deparse = TRUE) 
# [1] "mean.default" 
+0

Niesamowite dzięki uprzejmie. –

+0

Np, chętnie pomożemy. –

+0

Czekaj - mówisz, że twoja odpowiedź jest "NP" kompletna? :-) –

Powiązane problemy