Program 1:Bunu kullanırken bir döngü değişkeninin adresi neden değişiyor?
library(pryr)
for (x in 1:3) {
print(c(address(x), refs(x)))
}
çıkış, örneğin:
[1] "0x7a6a6c8" "1"
[1] "0x7a6a6c8" "1"
[1] "0x7a6a6c8" "1"
Program 2:
library(pryr)
for (x in 1:3) {
print(c(address(x), refs(x)))
print(x)
}
çıkış, örneğin:
[1] "0x7ae0298" "1"
[1] 1
[1] "0x7ae88c8" "1"
[1] 2
[1] "0x7af2668" "1"
[1] 3
Açıkçası x'in değeri değişiyor progra m 2, ama neden adresi de değişiyor? Döngü sırasında gc çağrılmıyorken, for döngüsü yaklaşık 500.000.000 kez çalışırken bu durum bellek sızıntılarına neden olabilir mi?
Eğer bir R döngü ile çalıştırırsanız 5e8 yineleme, performans hakkında endişelenmeli ve bellek sızıntısı olmamalıdır (hiçbiri yoktur). – Roland
R versiyonunuz nedir? Döngüsel değişken bir yerde kullanılmadıkça, R yeniden tahsis edilmekten kaçınır. Örneğin. (x in 1: 3) için {.Insal (denetle (x))} 'VS' için (1: 3'teki x) {(function (val) val) (x); .Internal (teftiş (x))}. ("X" üzerinde basit bir kapatma çağrısında, "x" işaretli olarak çok referanslı) –
Sürüm 3.3.1 kullanıyorum, çıktıları da düzenleyeceğim. – Wipster