मैंने this basic question को फिर से नामित वस्तुओं और @Shane के उत्तर पर पढ़ा, मुझे आलसी मूल्यांकन के लिए इंगित किया। अब मुझे आश्चर्य है कि assign
का मूल्यांकन भी आलसी है। बस यहाँ की तरह:आर में आलसी मूल्यांकन प्रभावित है?
assign("someNewName",someOldObject)
rm(someOldObject)
कारण है कि मैं इस बारे में चिंता निम्नलिखित उपयोग मामला है: मान लें मुझे मिल गया 10K + आर वस्तुओं, जिनमें से प्रत्येक दो विशेषताओं originalName
और additionalName
कहा जाता है। अब मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो उपयोगकर्ता को इन दो विशेषताओं को खोए बिना उपयोगकर्ता को एक नाम से दूसरी तरफ स्विच कर दे। लगभग इस तरह ...
संपादित करें: @ हैडली के इनपुट के आधार पर मैंने अपना कोड बदल दिया है।
switchObjectName <- function(x) {
n1 <- attributes(x)$originalName
n2 <- attributes(x)$additionalName
objName <- deparse(substitute(x))
if(objName == n1) {
delayedAssign(n2,x,assign.env=.GlobalEnv)
} else {
delayedAssign(n1,x,assign.env=.GlobalEnv)
}
rm(list=c(objName),envir=.GlobalEnv)
}
यह अच्छी तरह से काम करता है, लेकिन मैं काफी कुछ rm
बयान सही पाने के लिए हमें समस्या हुई। मैंने rm(objName,envir=.GlobalEnv)
की कोशिश की लेकिन इसे काम पर नहीं मिला, हालांकि objName निश्चित रूप से एक चरित्र कारण है क्योंकि यह deparse(substitute(x)
का परिणाम है।
यदि मैं आपके प्रश्न को सही तरीके से समझता हूं, तो 'देरी से पूछें', https://github.com/hadley/pryr/blob/master/R/assign-delayed.r और "असाइनमेंट: मानों के लिए बाध्यकारी नाम" अनुभाग देखें https://github.com/hadley/devtools/wiki/environments – hadley
एक बार और धन्यवाद। विशेष रूप से आपके विकी में अध्याय के सूचक ने वास्तव में क्या चल रहा है यह समझने में बहुत मदद की। वास्तव में सही संकेत वास्तव में था। –