क्या वर्णों की एक स्ट्रिंग को निम्नलिखित के अलावा किसी अन्य फ़ंक्शन में बदलने का कोई और तरीका है?

उदाहरण: x+2

f <- function(x) {
     eval( parse(text=("x+2")) )
}

print( f(2) )

4

मुझे कोई वैकल्पिक रास्ता नहीं मिल रहा है।

धन्यवाद

2
albert 15 जून 2018, 05:07

2 जवाब

सबसे बढ़िया उत्तर

अपनी स्ट्रिंग को शरीर के रूप में चिपकाकर फ़ंक्शन बनाने के बारे में, फिर पूरी चीज़ का मूल्यांकन कैसे करें?

str <- "x+2"
f <- eval(parse(text=paste("function(x) {",str,"}")))
f(2)
## 4

? इस तरह मूल्यांकन लागत का भुगतान एक बार किया जाता है, हर बार फ़ंक्शन को कॉल करने के बजाय, सामने ...

एक और संभावना है कि एक खाली शरीर के साथ एक्स का एक कार्य बनाएं, फिर पार्स किए गए अभिव्यक्ति को शरीर के रूप में भरें ...

f <- function(x) {}
body(f) <- parse(text="x+2")
f(2)

वैसे, मुझे उम्मीद है कि आप इस बात से सावधान रहेंगे कि आप किन स्ट्रिंग्स का मूल्यांकन करते हैं, उदा. क्या होगा यदि str "system('rm -rf /')"... जैसा कुछ है?

4
Ben Bolker 15 जून 2018, 05:44

हो सकता है कि मैं आपकी बात से पूरी तरह चूक गया हो, लेकिन यहाँ मुझे आपके लिए क्या मिला है:

f1 <- function(x="x") {
  a <- as.expression(paste0(x,"+2"))
  print(class(a))
  return( eval(parse(text=a)) )
}
f1(2)

4

1
David C. 15 जून 2018, 05:38