2015-10-27 18 views
5

Ich möchte den Namen der Funktion, die verwendet wird, aus einem Fehler extrahieren. Also, wenn ich hatte:Fehler bei der Verwendung der Funktion (vom Aufruf)

mean(letters) 
"P" * 5 

Ich möchte würde "mean.default" und "*" extrahieren. Ich kann den Anruf von dem Fehler wie folgt bekommen:

Aber haben Sie keine Möglichkeit, die Funktionsnamen zu greifen.

Antwort

8

Sie können die Funktion Name Teil mit $call[[1]] greifen. Wir könnten auch ein deparse Argument hinzufügen, um die Option hinzuzufügen, dass das Ergebnis als String zurückgegeben wird.

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

Ehrfürchtig danke schön. –

+0

Np, glücklich zu helfen. –

+0

Warten Sie - Sie sagen, Ihre Antwort ist "NP" abgeschlossen? :-) –

Verwandte Themen