#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:
Несколько альтернатив:
- Не зацикливайтесь, если
!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
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
while
цикл, самоинкрементирующий цикл, и вырывается, если!flag
. Я не собираюсь кодировать это, так как это не добавляет никакой пользы #1, но все же добавляет риск, который могут создать неограниченные (если плохо написанные)while
циклы.- Избегайте петли, делайте это напрямую:
flag <- FLASE sum(flag amp; x %% 2 == 0) # [1] 0 flag <- TRUE sum(flag amp; x %% 2 == 0) # [1] 3