#r #function #loops
Вопрос:
У меня есть что-то вроде следующего цикла, в R
котором я могу работать в течение определенного времени или количества итераций:
n_iteration lt;- 1 time_elapsed lt;-0 t1 lt;- Sys.time()
Чтобы запустить его на определенный срок:
while (time_elapsed lt;= 10) { t2 lt;- Sys.time() time_elapsed lt;- time_elapsed (t2-t1) print(paste0('Time elapsed:', time_elapsed, ' Iteration no:', n_iteration)) n_iteration lt;- n_iteration 1 }
Чтобы запустить его для нескольких циклов:
while (n_iteration lt;= 10) { t2 lt;- Sys.time() time_elapsed lt;- time_elapsed (t2-t1) print(paste0('Time elapsed:', time_elapsed, ' Iteration no:', n_iteration)) n_iteration lt;- n_iteration 1 }
Запуск любого из них решит эту задачу. Но как это можно обернуть в функцию, в которой я могу указать, какие критерии использовать для остановки? Я хочу добиться этого, не повторяя код.
Мой утомительный и неоптимальный подход:
loop_func lt;- function(stopping_criteria='STEPS') { n_iteration lt;- 1 time_elapsed lt;-0 t1 lt;- Sys.time() if(stopping_criteria=='TIME'){ while (time_elapsed lt;= 10) { t2 lt;- Sys.time() time_elapsed lt;- time_elapsed (t2-t1) print(paste0('Time elapsed:', time_elapsed, ' Iteration no:', n_iteration)) n_iteration lt;- n_iteration 1 } }else{ while (n_iteration lt;= 10) { t2 lt;- Sys.time() time_elapsed lt;- time_elapsed (t2-t1) print(paste0('Time elapsed:', time_elapsed, ' Iteration no:', n_iteration)) n_iteration lt;- n_iteration 1 } } }
Можно ли это сделать, не копируя while
цикл дважды?
Комментарии:
1. @RonakShah Я добавил свой подход. В принципе, я хочу получить результат без повторения
while
цикла, как я показал.
Ответ №1:
Вы можете написать другую функцию для while
цикла —
while_function lt;- function(x) { while (x lt;= 10) { t2 lt;- Sys.time() time_elapsed lt;- time_elapsed (t2-t1) print(paste0('Time elapsed:', time_elapsed, ' Iteration no:', x)) x lt;- x 1 } } loop_func lt;- function(stopping_criteria='STEPS') { n_iteration lt;- 1 time_elapsed lt;-0 t1 lt;- Sys.time() if(stopping_criteria=='TIME'){ while_function(time_elapsed) }else{ while_function(n_iteration) } }
Комментарии:
1. Это в какой-то степени решает поставленную цель. Но что, если у меня есть несколько параметров, которые мне нужны для ввода в функцию while. Можно ли это сделать с помощью такого подхода?