एक सहयोगी ने मुझसे यह पूछा, और मैंने इसके साथ संघर्ष किया है।एक समारोह के भीतर वक्र() को अभिव्यक्ति करने के लिए अभिव्यक्ति
मान लीजिए कि मैं एक फ़ंक्शन को परिभाषित करना चाहता हूं जो अभिव्यक्ति लेता है (मान लें कि x^2
कंक्रीटेंस के लिए) तर्क के रूप में और उस तर्क को curve()
पर पास करता है।
यदि मैं यह आसान तरीका क्या करना चाहते हैं, मैं सिर्फ
curve(x^2,from=0,to=3)
चलाने के लिए और यह ठीक काम करता है।
f <- function(g) {
curve(g,from=0,to=3)
}
यह काम करता है अगर मैं एक समारोह पारित:
मान लीजिए मैं एक आवरण समारोह सेट करने का प्रयास (मान लीजिए कि कुछ अन्य बातों की अवस्था की साजिश रचने के लिए मैं अलावा आवरण के अंदर क्या करना चाहते हैं):
f(function(x) x^2)
यह विफल रहता है अगर मैं, जब आर अभिव्यक्ति का मूल्यांकन करने की कोशिश करता है x^2
पारित करने के लिए प्रयास करें:
f(x^2)
## Error in eval(expr, envir, enclos) (from #2) : object 'x' not found
मैं क्या इसके लायक है के लिए
f <- function(g) {
h <- as.expression(substitute(g))
str(h)
curve(as.expression(substitute(g)),from=0,to=3)
}
f(x^2)
## expression(x^2)
## Error in curve(as.expression(substitute(g)), from = 0, to = 3) (from #4) :
## 'expr' must be a function, or a call or an expression containing 'x'
की कोशिश करनी चाहिए
f0 <- function(g) {
str(substitute(g))
curve(substitute(g),from=0,to=3)
}
f0(x^2)
## language x^2
## Error in curve(substitute(g), from = 0, to = 3) (from #3) :
## 'expr' must be a function, or a call or an expression containing 'x'
ठीक है, कि शायद पता चलता है,
- यह विफल:
मैं समारोह के भीतर
substitute
का उपयोग करके इस को रोकने के लिए कोशिश कर सकते हैं अलग-अलगcurve(h,...)
("फ़ंक्शनh
नहीं मिला") - यह उसी तरह से विफल रहता है
as.call()
as.expression()
curve()
दिया जाता है किसी भी मामले में भाव पर काम नहीं करता:
curve(expression(x^2),from=0,to=1)
## Error in curve(expression(x^2), from = 0, to = 1) :
## 'expr' did not evaluate to an object of length 'n'
अगर मैं curve()
डिबगिंग की कोशिश को देखने के लिए क्या हो रहा है, हमारे पास है:
sexpr <- substitute(expr)
...
if (!((is.call(sexpr) || is.expression(sexpr)) && xname %in%
all.vars(sexpr)))
stop(...)
यहां sexpr
है, जो xname %in% all.vars(sexpr)
परीक्षण में विफल रहता है ...
इसे कैसे संभालना है इसके बारे में कोई विचार?
क्या आपने एक शॉट 'do.call' दिया था? ऐसा लगता है जैसे यह 'एलएम',' ग्लम ', आदि –