Как выполнить цикл по условию флага в R?

#r

Вопрос:

Предположим, что существует петля

 x <- c(2,5,3,9,8,11,6)
count <- 0
for (val in x) {
if(val %% 2 == 0)  count = count 1
}
 

и есть переменная флага.
Как это сделать, если flag=TRUE затем запустить этот цикл и если флаг имеет какое-либо другое значение, то проигнорируйте цикл выполнения.Просто продолжайте выполнять остальную часть кода.

Комментарии:

1. Перед петлей if(flag) { <loop code> } . Нет необходимости явно проверять flag == TRUE , но если вам нужно, используйте if(isTRUE(flag)) .

2. Кроме того, векторизация count <- sum(x %% 2 == 0) эквивалентна вашему циклу.

Ответ №1:

Несколько альтернатив:

  1. Не зацикливайтесь, если !flag :
     flag <- FALSE
    x <- c(2,5,3,9,8,11,6)
    count <- 0
    if (flag) {
      for (val in x) {
        if(val %% 2 == 0)  count = count 1
      }
    }
    count
    # [1] 0
     
  2. break рано вышел из петли:
     flag <- FALSE
    x <- c(2,5,3,9,8,11,6)
    count <- 0
    for (val in x) {
      if (!flag) break
      if(val %% 2 == 0)  count = count 1
    }
    count
    # [1] 0
     
  3. while цикл, самоинкрементирующий цикл, и вырывается, если !flag . Я не собираюсь кодировать это, так как это не добавляет никакой пользы #1, но все же добавляет риск, который могут создать неограниченные (если плохо написанные) while циклы.
  4. Избегайте петли, делайте это напрямую:
     flag <- FLASE
    sum(flag amp; x %% 2 == 0)
    # [1] 0
    
    flag <- TRUE
    sum(flag amp; x %% 2 == 0)
    # [1] 3