2013-04-17 3 views
-2

получил цикл while, и это работает нормально. Однако мне также нужно добавить другое условие.R while loop и количество раз

Мне нужен цикл, чтобы он продолжал идти, пока он не удовлетворяет циклу while, но тогда мне также нужно добавить, что это может повторяться только x раз.

Я думаю, вам нужно будет сделать цикл for, чтобы сделать x раз, можно ли вставить цикл while?

В принципе, как я могу сделать петлю или достигнуть цели или остановиться после x петель ??

+2

Опубликовать воспроизводимый пример. То, что мы можем запустить – Nishanth

+0

Воспроизводимым примером @ e4e5f4 является пример данных + код, который воспроизводит вашу проблему на наших компьютерах. См. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example или ответ RomanLustrik. –

+0

Как правило, я бы согласился с тем, что воспроизводимый пример - путь, но в этом конкретном случае описания было достаточно, чтобы объяснить мои рассуждения с помощью короткого самосозданного примера. –

ответ

4

Выражение в while должно быть TRUE для продолжения цикла. Вы можете использовать | или &, чтобы добавить дополнительные условия. Этот цикл выполняется 99 раз или до тех пор, сумма случайных величин не меньше 100.

counter <- 0 
result <- 0 

while(counter < 100 | sum(result) < 100) { 
    result <- sum(result, rnorm(1, mean = 5, sd = 1)) 
    counter <- sum(counter, 1) 
} 

> result 
[1] 101.5264 
> counter 
[1] 21 
+0

Большое спасибо, не знал о '|' действительно полезно. Было ли это по-другому, но все-таки помогло мне это решить. VEery новичок в этом, так что извините, если кажется глупым. – Bennn

0

Просто передать текущее значение итератора в качестве аргумента в вашу функцию. Таким образом, вы можете разбить рекурсию, если она достигает определенного значения.

Но почему у вас есть время цикла, если вы используете рекурсию, например:

add_one_recursive = function(number) { 
    number = number + 1 
    cat("New number = ", number, "\n") 
    if(number > 10) { 
     return(number) 
    } else { 
     return(add_one_recursive(number)) 
    } 
} 
final_number = add_one_recursive(0) 
New number = 1 
New number = 2 
New number = 3 
New number = 4 
New number = 5 
New number = 6 
New number = 7 
New number = 8 
New number = 9 
New number = 10 
New number = 11 

Не требует явного цикла вообще.