2015-08-31 4 views
0

Я хочу установить цикл для запуска от 1 до 10. Затем изнутри цикла я хочу изменить индекс, чтобы пропустить итерации 6 и 7 и завершить цикл с помощью итераций 8, 9 и 10.R: Установить индекс цикла из цикла

for (i in 1:10) { 
    print(i) 
    if (i == 5) { 
    i <- 8 
    print(i) 
    } 
} 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 5 
[1] 8 
[1] 6 
[1] 7 
[1] 8 
[1] 9 
[1] 10 

Очевидно, i после моей линии 1 <- 8 задается функцией for до 6. есть ли способ, чтобы предотвратить это?

+2

'r' позволяет использовать переменный дважды в этом случае и корректирует необычный стиль программирования. Переменная цикла остается неизменной из-за изменения 'i' в цикле. Переменная, определенная внутри цикла, эффективно сохраняется как отдельная переменная. – RHertel

+0

Почему бы не перебрать только переменные, с которыми вы хотите что-то сделать? Или используйте условие 'if (i satisifies condition) {do something}'? – Heroka

+3

Возможный дубликат [this] (http://stackoverflow.com/questions/32076971/r-for-loop-skip-to-next-iteration-ifelse) – akrun

ответ

1

Вы можете сделать это так:

i=1 
while (i<=10) { 
    print(i) 
    if (i == 5) { 
    i <- 8 
    }else i<-i+1 
} 

[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 8 
[1] 9 
[1] 10 
0

Есть два способа сделать это:

for(i in 1:10) { 
    if(i!=6 && i!=7) { 
     print(i) 
    } 
} 

А, другой:

i = 1 
while(i<=10) { 
    print(i) 
    if(i == 5) { 
    i <- i + 3 
    } else { 
    i <- i+1 
    } 
} 
4

Как вы говорите о пропуске, лучше всего использовать следующие значения, которые вы хотите пропустить:

for (i in 1:10) { 
    if (i %in% c(6,7)) { 
    next 
    } 
    print(i) 
} 

Цитата help("for"):

next останавливает обработку текущей итерации и продвигает зацикливание индекса.

Другим вариантом является ограничением диапазона вашего цикла по так:

for(i in c(1:5,8:10)) { 
    print(i) 
}