इस समारोह a()
, जो तर्क है कि में पारित किया गया था बाहर प्रिंट पर विचार करें:विकल्प() का उपयोग तर्क के नाम, कई स्तरों प्राप्त करने के लिए
a <- function(x) {
message("The input is ", deparse(substitute(x)))
}
a("foo")
# The input is "foo"
tmplist <- list(x1 = 1, x2=2)
a(tmplist)
# The input is tmplist
काम करता है।
b <- function(y) {
a(y)
}
b("foo")
# The input is y
b(tmplist)
# The input is y
एक समाधान काम करने के लिए एक और substitute
में रैप करने के लिए है लगता है कि और एक eval
: लेकिन जब a()
एक और समारोह से कहा जाता है, यह अब बाहर मूल तर्क नाम प्रिंट
a1 <- function(x) {
message("The input is ", deparse(eval(substitute(substitute(x)), parent.frame())))
}
a1("foo")
# The input is "foo"
tmplist <- list(x1 = 1, x2=2)
a1(tmplist)
# The input is tmplist
b1 <- function(y) {
a1(y)
}
b1("foo")
# The input is "foo"
b1(tmplist)
# The input is tmplist
लेकिन यह सुरुचिपूर्ण लगता है। और अगर मैं एक और परत जोड़ता हूं तो यह विफल हो जाता है:
c1 <- function(z) {
b1(z)
}
c1("foo")
# The input is z
क्या मूल तर्क प्राप्त करने का एक अच्छा, सामान्य तरीका है?
मैं वातावरण से निपटने पर कोई विशेषज्ञ हूँ, लेकिन मुझे लगता है कि या तो के रूप में kohske किया 'parent.frame' के साथ खेल, या एक वैश्विक चर निर्दिष्ट करने के लिए अपने ही विकल्प हैं। आर सी के तरीके के संदर्भ में पास नहीं करता है। –