假設我們有如下語法:
for (i in sequence) {
...
sequence <- append(sequence, i, after = 3)
}
但是代碼似乎不能正常作業,因為sequence沒有在括號內更新。我已經提出了一個類似的決定,while而不是使用回圈。for無論如何都可以使用回圈嗎?
uj5u.com熱心網友回復:
forR 中的回圈僅在開始時評seq估值(sequence在您的示例中)。因此,更改sequence回圈不會影響回圈運行的次數。
例如,
sequence <- 1:2
for (i in sequence) {
print(i)
sequence <- 0
}
將列印數字 1 和 2,然后將完成,并sequence包含一個零。
這在幫助頁面中有描述?"for":
for 回圈中的 seq 在回圈開始時計算;隨后更改它不會影響回圈。如果 seq 的長度為零,則跳過回圈體。否則,變數 var 將依次分配給 seq 的每個元素的值。您可以在回圈體內分配給 var,但這不會影響下一次迭代。當回圈終止時,var 仍然是一個包含其最新值的變數。
uj5u.com熱心網友回復:
不,R 中的 for 回圈可以被視為一個函式呼叫,它“按值”迭代輸入(例如,通過復制輸入)。啟動后對迭代器序列的任何更改都不會影響 for 回圈迭代。這通常是好的做法,因為它大大減少了不良的編碼實踐和無限回圈。這很容易用一個簡單的例子來說明:
idx <- 1:15
for(i in idx){
idx <- head(idx, -1)
cat('idx: ', idx, '\n')
cat('i: ', i, '\n')
}
如果你想更新迭代器,你最好的選擇是repeat或者while但要小心,因為它增加了錯誤和意外無限回圈的可能性。
idx <- 1:15
while(length(idx) != 0){
i <- head(idx, 1)
idx <- tail(idx, -1)
cat('idx: ', idx, '\n')
cat('i: ', i, '\n')
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403788.html
標籤:
上一篇:如何解決“AttributeError:'Event'objecthasnoattribute'key'”?[復制]
