अपने कार्य unevaluated अभिव्यक्ति पर निर्भर करता है, तो आप, substitute
उपयोग करने के लिए अंदर ...
कॉल के मूल्यांकन से बचने के लिए चाहते हो सकता है [भी आप, में उचित रूप से, missing((x){
:) एक लापता कोष्टक था] आवरण।
उदाहरण:
f <- function(...) deparse(as.list(substitute(list(...)))[-1L])
wrap <- function(x){
L <- if(missing(x)) list() else list(x)
do.call(f, L)
}
wrap2 <- function(x){
L <- if(missing(x)) list() else list(substitute(x))
do.call(f, L)
}
नोट कैसे wrap2
"स्पर्श" नहीं है तर्क:
f(1+2+3) # "list(1 + 2 + 3)"
wrap(1+2+3) # "list(6)"
wrap2(1+2+3) # "list(1 + 2 + 3)"
खाली कॉल के लिए, वे अप्रभेद्य हैं:
f() # "list()"
wrap() # "list()"
wrap2() # "list()"
स्रोत
2013-09-07 11:27:47
यह पूरी तरह से काम करता है। चूंकि रैपर फ़ंक्शन बहुत तेज होना चाहिए, मुझे आश्चर्य है कि यह हैकरी कितनी अक्षम है; समारोह कॉल आर + सूची निर्माण में अपेक्षाकृत महंगे हैं मुफ्त में भी नहीं है ... –