[R] R與Python的for循環機制


在做數據分段截取的時候,發現R語言for循環的表現和其他語言不太一樣。

上代碼:

for( i in 1:4) {
     i = i + 1
     print(i)
}
結果:
[1] 2
[1] 3
[1] 4
[1] 5

即作為循環計次的i, 並不會因為在循環體中的賦值變化而變化。

在Python中查看也是一樣的結果. 

猜測是動態語言在生成for循環的時候, 會提前生成循環列表的下標列表, 避免在循環中對下標做操作后,導致循環結果不穩定.

這樣的機制還避免了每次循環會重新計算長度表達式的問題.

如 for x in len(str)。 在Java中,每一次循環都會執行一次len(str), 存在很大的性能開銷.

因此Java中,習慣的寫法是: length = len(str); for x in length {}

而在Python或R中則不會存在這種問題, 不管str如何變更,len(str)都只會執行一次. for x in len(str)的寫法並不會出現性能問題.

 

$todo: 看<Advanced R>中是否有相關的解釋。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM