2015-07-17 4 views
1

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

Например:

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

Я хотел бы repeate этих команд, пока они не закончатся без ошибок.

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

+0

Не могли бы вы не использовать 'а [образец (1: nrow (а), 1),] <- 10' для второй линии? Это присвоит 10 случайной существующей позиции – Bazz

+0

Да, пример является иллюстрацией общей проблемы, с которой я столкнулся. Я написал этот код намеренно, чтобы показать ситуацию, когда код иногда приводит к ошибке и иногда запускается без ошибок. – user1984076

ответ

2

Синтаксис tryCatch выглядит что-то вроде

result = tryCatch({ 
    expr 
}, warning = function(warning-condition) { 
    warning-handler-code 
}, error = function(error-condition) { 
    error-handler-code 
}, finally={ 
    cleanup-code 
}) 

Вы можете вложить свой код в бесконечном цикле внутри tryCatch как

while(1==1) 

Эти 2 понятия должны помочь вам решить вашу проблему. С их помощью можно написать как

boolFalse<-F 
while(boolFalse==F) 
{ 
    tryCatch({ 
    a<-matrix(NA,ncol=1,nrow=sample(1:5,1)) 
    a[sample(1:6,1),1]<-10; 
    boolFalse<-T 
    },error=function(e){ 
    },finally={}) 
} 
+0

Если вы вставляете эту логику в функцию, обязательно объявляйте значение 'boolFalse' вне функции. – ivandov

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