2015-07-10 2 views
-3

Я запускаю большой цикл в R (к сожалению). Есть много случайных ошибок, которые продолжают появляться. Есть ли общий код, который я мог бы ввести в цикл for, который заставит его перейти к следующей итерации в случае любого типа ошибки? Благодарю. Я был бы очень признателен, если бы вы предоставили мне код, который я мог бы просто скопировать и вставить, поскольку это над моей головой.Как уловить ошибки в цикле for в R?

ответ

2
loop.vals <- 1:6 
success <- logical(length(loop.vals)) 
for(i in loop.vals) 
if(
    !inherits(
    try({ 
     if(i %% 2) stop("Random Error") 
     cat("Success", i, "\n") 
    }, silent=TRUE), # as per RHertel 
    "try-error" 
    )) success[[i]] <- TRUE 

Производит:

Success 2 
Success 4 
Success 6 

Тогда

cat("Failures: ", which(!success)) 
# Failures: 1 3 5 

Старый Ответ

Конечно, вы можете просто try содержимое всего цикла. Здесь мы проиллюстрируем с петлей, которая не с каждым нечетным

for(i in 1:6) try({ 
    if(i %% 2) stop("Random Error") 
    cat("Success", i, "\n") 
}) 

производит:

Error in try({ : Random Error 
Success 2 
Error in try({ : Random Error 
Success 4 
Error in try({ : Random Error 
Success 6 
+0

Вы также можете отказаться от вывода сообщений об ошибках и двигаться дальше с петлей с помощью 'попробовать ((.. что может вызвать проблемы ...), silent = TRUE) ' – RHertel

+0

Спасибо. И знаете ли вы, как я мог отслеживать, какие итерации были пропущены? – ejn

+0

@ejn См. Обновление для ответа – BrodieG

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