2015-10-27 5 views
5

में फ़ंक्शन का उपयोग किया जा रहा है, मैं किसी त्रुटि से उपयोग किए जा रहे फ़ंक्शन का नाम निकालना चाहता हूं। तो अगर मैं था:त्रुटि (कॉल से)

mean(letters) 
"P" * 5 

मैं "mean.default" और "*" निकालना चाहते हैं चाहते हैं। मैं निम्नानुसार त्रुटि से कॉल प्राप्त कर सकता हूं:

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 

लेकिन फ़ंक्शन नामों को पकड़ने का कोई तरीका नहीं है।

उत्तर

8

आप $call[[1]] के साथ फ़ंक्शन नाम भाग को पकड़ सकते हैं। एक स्ट्रिंग के रूप में परिणाम लौटने का विकल्प जोड़ने के लिए हम deparse तर्क भी जोड़ सकते हैं।

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

बहुत बढ़िया धन्यवाद। –

+0

एनपी, मदद करने में खुश। –

+0

रुको - आप कह रहे हैं कि आपका उत्तर "एनपी" पूरा है? :-) –

संबंधित मुद्दे