簡體   English   中英

如何跳過 R 中的多個 for 循環迭代,如 Python?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM