假設我有以下 R 回圈:
for(i in 1:5){
print(i)
i = i 1
}
這會產生以下結果:
1
2
3
4
5
這很奇怪,因為我確實在回圈內重新定義了索引。
為什么我們會看到這種行為?
我以為我會看到如下內容:
1
3
4
5
6
uj5u.com熱心網友回復:
對回圈變數的賦值i在下一次回圈迭代中被丟棄,因此i = i 1無效。如果要i在回圈內更改 的值,可以使用while回圈。
但是,1 3 4 5 6由于以下幾個原因,您的預期輸出沒有意義:
- 的分配
i,如前所述; - 為什么它不會每隔一個回圈遞增?和
- 的域
i,1:5,在回圈的第一道次鎖定。
話雖如此,試試這個:
i <- 1
lim <- 5
while (i <= lim) {
if (i == 2) {
lim <- lim 1
} else {
print(i)
}
i <- i 1
}
# [1] 1
# [1] 3
# [1] 4
# [1] 5
# [1] 6
(我在這里唯一的警告是,如果您的 增量i以任何條件為條件,則需要其他一些東西來防止這是一個無限回圈。也許這種警告在您的用例中是不必要的,但它似乎至少與提及有關它。)
uj5u.com熱心網友回復:
的i是對每個值和不能與被修改i = i 1。我們可以使用if條件
for(i in 1:5){
if(i != 2)
print(i)
}
-輸出
[1] 1
[1] 3
[1] 4
[1] 5
此外,如果打算對向量進行子集化,為什么不使用向量化選項
v1 <- 1:5
v1[v1 != 2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333084.html
下一篇:識別矩陣中相同行的組
