[英]How can I skip multiple for loop iterations in R like Python?
如您在下面的 python 代碼中所見,如果滿足條件,迭代將跳過 1、5 和 9。
range_iter = iter(range(10))
for i in range_iter:
print(i)
if i % 4 == 0:
next(range_iter)
print('Condition satisfied',i)
0
Condition satisfied 0
2
3
4
Condition satisfied 4
6
7
8
Condition satisfied 8
我試過了。 但這沒有用。
library(iterators)
range_iter <- iterators::iter(0:9)
for (i in range_iter) {
if (i %% 4 == 0) {
next(range_iter)
print(paste("Condition satisfied",i))
}
}
我得到 en error: Error in i%%4: non-numeric argument to binary operator
我如何在 R 中執行此操作?
R 中的 modolo 語法是%%
:
for (i in seq(0,10)) {
if (i%%4==0) {
print(paste("Condition satisfied",i))
}else{
print(i)
}
}
[1] "Condition satisfied 0"
[1] 1
[1] 2
[1] 3
[1] "Condition satisfied 4"
[1] 5
[1] 6
[1] 7
[1] "Condition satisfied 8"
[1] 9
[1] 10
由於 R 默認使用基於 1 的索引,因此
如果你想要基於 0,你必須在迭代器中指定
R 沒有任何跳過下一次迭代的命令。 next
一條語句(單獨,而不是像next(range_iter)
這樣的 function 調用)將跳過當前語句。
所以要做你想做的事,你會像這樣寫循環:
skip <- FALSE
for (i in 0:9) {
if (skip) {
skip <- FALSE
next
}
print(i)
if (i %% 4 == 0) {
skip <- TRUE
print(paste("Condition satisfied",i))
}
}
#> [1] 0
#> [1] "Condition satisfied 0"
#> [1] 2
#> [1] 3
#> [1] 4
#> [1] "Condition satisfied 4"
#> [1] 6
#> [1] 7
#> [1] 8
#> [1] "Condition satisfied 8"
創建於 2023-01-14,使用reprex v2.0.2
一般來說,先驗地創建你想要的指數要好得多,
如
idx <- seq(0,10) %% 4
idx <- idx[idx > 0]
for (jdx in idx) { do_stuff}
或者當然,如果您只想要零值,
idx <- seq(0,10) %% 4
idx <- which(idx == 0 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.