कोशिश करें sys.call(0)कि कॉल ऑब्जेक्ट आउटपुट ठीक है या फिर डिले करें कि यदि आप केवल एक वर्ण स्ट्रिंग के रूप में नाम चाहते हैं। नीचे इस के कुछ परीक्षण दिए गए हैं। sys.call नाम और तर्क दोनों को लौटाता है और [[1]] सिर्फ नाम भर देता है।
my_fun <- function() deparse(sys.call(0)[[1]])
g <- function() my_fun()
my_fun()
## [1] "my_fun"
g()
## [1] "my_fun"
फ़ंक्शन नाम
ध्यान दें कि वास्तव में कार्यों के नाम नहीं हैं। फ़ंक्शन नाम के रूप में हम जो मानते हैं वह वास्तव में केवल चर होते हैं जो फ़ंक्शन को पकड़ते हैं और फ़ंक्शन का हिस्सा नहीं होते हैं। एक फ़ंक्शन में तर्क, निकाय और एक वातावरण होता है - उन घटकों के बीच कोई फ़ंक्शन नाम नहीं होता है।
अनाम कार्य
इसके अलावा किसी के भी अनाम कार्य हो सकते हैं और उपरोक्त के साथ उपयोग किए जाने पर ये अजीब परिणाम दे सकते हैं।
sapply(1:3, function(x) deparse(sys.call(0)[[1]]))
## [1] "FUN" "FUN" "FUN"
किनारे के मामले
कुछ स्थितियाँ मौजूद हैं, विशेष रूप से अनाम फ़ंक्शंस में शामिल हैं, जहां deparseएक से अधिक तत्व वापस आ जाएंगे , इसलिए यदि आप ऐसे एज मामलों को कवर करना चाहते हैं तो nlines = 1 तर्क का उपयोग करें या अवमूल्यन (...) [[1]] या के रूप में उपयोग करें R 4.0.0 में deparse1 का उपयोग करके @Konrad Rudolph द्वारा उल्लेख किया गया है।
Map(function(x) deparse(sys.call(0)[[1]], nlines = 1), 1:2)
## [[1]]
## [1] "function (x) "
##
## [[2]]
## [1] "function (x) "
Map(function(x) deparse(sys.call(0)[[1]]), 1:2) # without nlines=1
## [[1]]
## [1] "function (x) " "deparse(sys.call(0)[[1]])"
##
## [[2]]
## [1] "function (x) " "deparse(sys.call(0)[[1]])"
अन्य
स्मरण करो । यदि आप चाहते हैं कि फ़ंक्शन का नाम फ़ंक्शन को पुन: कॉल करने के लिए है, तो Recall()इसके बजाय उपयोग करें । मदद फ़ाइल से:
fib <- function(n)
if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
fib(4)
## [1] 3
चेतावनी और रोकना ये दोनों फ़ंक्शन का नाम जारी करते हैं, साथ ही जो भी तर्क उनके पास जाता है, इसलिए वर्तमान फ़ंक्शन नाम प्राप्त करने की कोई आवश्यकता नहीं है।
testWarning <- function() warning("X")
testWarning()
## Warning message:
## In testWarning() : X