кубика и останавливается, если результат четный. А дальше я хочу, чтобы эта функция выполнялась в цикле, пока не выпадет что-нибудь нечетное.
my_foo <- function(x){
s <- sample(1:6, 1)
if(s %in% c(2, 4, 6)) stop("oh no... even")
rnorm(s)
}
results <- NA
set.seed(42)
while(length(results) == 1){
results <- my_foo()
}
Однако, когда функция доходит до четного, она стопится и вылетает из while... В какую сторону смотреть?
Надо внутри цикла её в try() завернуть. Сейчас она останавливается с ошибкой, если выпадает четное число
Я бы предложил делать все иначе. 1. Генерится сэмпл значений с запасом. 2. Отрезается по правилу первого четного 3. Формируется итератор и запускается в параллель. Плюсов масса. Нет бесконечного цикла, заранее известна глубина и время исполнения, можно параллелить, скорость, отсутствие постоянных проверок и обработки исключений, простота и компактность
ну Илья, я бы конкретно эту задачу решал по-другому, я же таким образом иллюстрирую архитектуру но спасибо!
Тогда совсем другая ситуация
А надо ли там обязательно ошибку выбрасывать? Можно же возвращать FALSE/TRUE - чет/нечет. И тогда будет нормально в цикле работать: while(my_foo()){}
так если будет TRUE/FALSE фунция не прекратит работу...
В смысле? Вместо stop(...) пишем return(FALSE) - и замечательно прекращает работу
а-а-а-а, с return.... Ну я уже написал по-своему, но да, в эту сторону я не подумал
Обсуждают сегодня