2015-07-16 6 views
-1

У меня есть цикл, который выполняет ряд операций.Повторить цикл до тех пор, пока не будут найдены ошибки

В некоторых случаях решение проблемы отсутствует, поэтому код возвращает ошибку.

Если я продолжаю повторное выполнение цикла, в конечном итоге он найдет решение, которое выполняется без ошибок.

Я хотел бы вставить цикл в оператор while(), который повторяет цикл до тех пор, пока программа не вернет никаких ошибок или предупреждений.

Я не хочу ловить ошибку. вместо этого я хочу повторить попытку, пока не будет ошибки.

Как это можно сделать?

Вот небольшой пример:

a<-matrix(NA,ncol=1,nrow=sample(1:5,1)) 
a[sample(1:5,1),1]<-10 

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

+3

Вы можете использовать 'try' для проверки условия, и если нет ошибки, вы устанавливаете переменную для цикла while в' FALSE'. Но некоторые примеры кода могут быть полезны. – drmariod

+0

Пожалуйста, разместите воспроизводимый код и данные и дайте понять, что вы подразумеваете под «ошибкой». Физически невозможно, чтобы код работал «иногда», если вы не выбрали какой-то рандомизатор там –

+0

Я добавил небольшой воспроизводимый пример – user1984076

ответ

5

tryCatch ваш друг:

for (i in 1:10) { 
    tryCatch({ 
    print(i) 
    if (i==7) stop("Urgh, the iphone is in the blender !") 
    }, error=function(e){cat("ERROR :",conditionMessage(e), "\n")}) 
} 

[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 6 
[1] 7 
ERROR : Urgh, the iphone is in the blender ! 
[1] 8 
[1] 9 
[1] 10 

Очевидно, что вы, вероятно, хотите использовать какое-то время вместо для.

+0

благодарит за вашу помощь. Сообщение об ошибке предоставляется программой. Как добавить это в tryCatch? у вас есть if (i == 7), но в моем случае это должно быть «если ошибка» – user1984076

+0

Можете ли вы показать, какую ошибку возвращает ваша программа? – Sharko

+0

Я добавил игрушечный пример выше – user1984076

Смежные вопросы