कार्यक्रम 1:इसका उपयोग करते समय लूप वैरिएबल का पता क्यों बदल रहा है?
library(pryr)
for (x in 1:3) {
print(c(address(x), refs(x)))
}
आउटपुट जैसे:
[1] "0x7a6a6c8" "1"
[1] "0x7a6a6c8" "1"
[1] "0x7a6a6c8" "1"
कार्यक्रम 2:
library(pryr)
for (x in 1:3) {
print(c(address(x), refs(x)))
print(x)
}
आउटपुट जैसे:
[1] "0x7ae0298" "1"
[1] 1
[1] "0x7ae88c8" "1"
[1] 2
[1] "0x7af2668" "1"
[1] 3
जाहिर एक्स का मान बदल रहा है progra एम 2, लेकिन एड्रेस भी क्यों बदल रहा है? क्या लूप के दौरान जीसी नहीं कहा जाता है, जबकि 500,000,000 बार चलने के लिए लूप होने पर मेमोरी लीक हो सकता है?
आप के साथ एक अनुसंधान पाश चलाते हैं 5e8 पुनरावृत्तियों को आपको प्रदर्शन के बारे में चिंता करनी चाहिए और स्मृति रिसाव नहीं है (कोई भी नहीं है)। – Roland
आपका आर संस्करण क्या है? जब तक लूपिंग चर का उपयोग कहीं भी/असाइन नहीं किया जाता है, आर फिर से आवंटित करने से बचाता है। जैसे 'के लिए तुलना करें (x में 1: 3) {। अनंत (निरीक्षण (एक्स))} 'वीएस' के लिए (x में 1: 3) {(फ़ंक्शन (वैल) वैल) (x); आंतरिक (निरीक्षण (एक्स))} '। ("X" पर एक साधारण बंद करने के लिए, "x" को बहु-संदर्भित के रूप में चिह्नित किया गया है) –
मैं संस्करण 3.3.1 का उपयोग करता हूं, मैं आउटपुट को संदर्भों की संख्या देने के लिए संपादित करने जा रहा हूं। – Wipster