2012-09-03 6 views
6

क्या कोई जानता है कि कोई फ़ंक्शन F लिखना है जो एक फ़ंक्शन कॉल (कहें, मतलब (x = 1:10)) को तर्क के रूप में लेता है, और केवल नाम देता है समारोह का आह्वान किया जा रहा है (मतलब)?फ़ंक्शन कॉल से फ़ंक्शन कॉल नाम निकालने

मेरे सबसे अच्छे प्रयास अब तक नीचे

(function(x1){ 

    return(deparse(substitute(x1))) 

})(mean(x = 1:10)) 
### 'mean(x = 1:10)' 

बदलने x1 (समारोह कॉल) से पहले डे-पार्स एक अभिव्यक्ति के लिए संक्षेप में ज्यादा मदद करने के लिए प्रतीत नहीं होता: कि रिटर्न

(function(x1){ 

    return(deparse(as.expression(substitute(x1)))) 

})(mean(x = 1:10)) 
# "expression(mean(x = 1:10))" 

यदि संभव हो, तो मैं अज्ञात कार्यों को तर्क के रूप में भी उपयोग करने में सक्षम होना चाहता हूं, इसलिए F (फ़ंक्शन (x) प्रिंट (x)) (फ़ंक्शन (x) प्रिंट (x)) (1))। अगर आपको किसी स्पष्टीकरण की आवश्यकता है तो टिप्पणी करने के लिए स्वतंत्र महसूस करें। धन्यवाद।

संपादित 1: बस ध्यान दें, मैं पहले कोष्ठक की जांच करने और इससे पहले कोड ("मतलब (x = 1:10)" के लिए एक्साइज करना चाहता हूं, जो "मतलब" लौटाएगा), " जोश ओ ब्रायन के जवाब सही था: समारोह एफ कि उपरोक्त शर्तों है

F <- function(x) deparse(substitute(x)[[1]]) 

यह काम करता है को संतुष्ट करता है बुरा (Fun_nAme "वास्तव में आर में एक कानूनी समारोह नाम

सवाल का जवाब है बाइनरी ऑपरेटरों, मानक कार्यों और अज्ञात कार्यों के लिए अच्छी तरह से

उत्तर

8

यहाँ एक सरल समारोह है कि जो आप चाहते हैं वह करता है:

F <- function(x) deparse(substitute(x)[[1]]) 

F(mean(x=1:10)) 
# [1] "mean" 

F((function(x) print (x))(1)) 
# [1] "(function(x) print(x))" 

F(9+7) 
# [1] "+" 
1

मैं तुम क्या करने की कोशिश कर रहे हैं पता नहीं है या अगर यह एक अच्छा विचार है या अगर यह तुम क्या चाहते है, लेकिन यहाँ regex के साथ उस पर एक अजीब है:

FUN <- function(x1){ 
    z <- deparse(substitute(x1)) 
    list(fun=strsplit(z, "\\(")[[c(1, 1)]], 
    eval=x1) 
} 

FUN(mean(x = 1:10))