Ошибка пропуска в петле

Я делаю цикл for для генерации 180 графиков для моей матрицы 6000 X 180 (1 граф на столбец), некоторые данные не соответствуют моим критериям, и я получаю ошибку:

"Error in cut.default(x, breaks = bigbreak, include.lowest = T) 'breaks' are not unique". 

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

Вот моя команда:

 for (v in 2:180){ mypath=file.path("C:", "file1", (paste("graph",names(mydata[columnname]), ".pdf", sep="-"))) pdf(file=mypath) mytitle = paste("anything") myplotfunction(mydata[,columnnumber]) ## this function is defined previously in the program dev.off() } 

Примечание. Я нашел множество сообщений о tryCatch, и никто из них не работал для меня (или, по крайней мере, я не мог правильно применить эту функцию). Файл справки также не очень помог.

Помощь была бы оценена. Благодарю.

Один (грязный) способ сделать это – использовать tryCatch с пустой функцией для обработки ошибок. Например, следующий код вызывает ошибку и прерывает цикл:

 for (i in 1:10) { print(i) if (i==7) stop("Urgh, the iphone is in the blender !") } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 Erreur : Urgh, the iphone is in the blender ! 

Но вы можете обернуть свои инструкции в tryCatch с функцией обработки ошибок, которая ничего не делает, например:

 for (i in 1:10) { tryCatch({ print(i) if (i==7) stop("Urgh, the iphone is in the blender !") }, error=function(e){}) } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10 

Но я думаю, вы должны хотя бы напечатать сообщение об ошибке, чтобы узнать, произошло ли что-то плохое, позволяя вашему коду продолжать работать:

 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 

EDIT: чтобы применить tryCatch в вашем случае, было бы что-то вроде:

 for (v in 2:180){ tryCatch({ mypath=file.path("C:", "file1", (paste("graph",names(mydata[columnname]), ".pdf", sep="-"))) pdf(file=mypath) mytitle = paste("anything") myplotfunction(mydata[,columnnumber]) ## this function is defined previously in the program dev.off() }, error=function(e){cat("ERROR :",conditionMessage(e), "\n")}) } 

Вместо того, чтобы поймать ошибку, не было бы возможности проверить функцию или myplotfunction() раньше, если возникнет ошибка (т. myplotfunction() Если разрывы уникальны), и только запишите ее для тех случаев, когда она не появится? !

  • Индекс декремента в цикле после циклов Swift C-стиля не рекомендуется
  • Можно ли объявить две переменные разных типов в цикле for?
  • Interesting Posts

    Получите обратный iterator с iteratorа вперед, не зная тип значения

    Как мы можем разбивать страницы на datagridview в winform

    MS Word – Удаление заголовка только в режиме просмотра OS X

    Тестирование безопасности инициализации конечных полей

    Выполнение выполнения команды в PowerShell

    Эффективное цветовое отображение изображения на Java

    Как кэшировать растровые изображения в встроенную память

    Как связаны iteratorы и указатели?

    Как сохранить массив int в настройках приложения

    Как я могу программно загрузить файл на веб-сайт?

    ECC-плагин в материнской плате без ECC

    Почему моя беспроводная сетевая карта должна быть сброшена каждый раз, когда я запускаю или разбужу свою машину?

    Что делает одиночная цитата в пакетных файлах Windows?

    Как увеличить максимальное количество USB-устройств, которые можно подключить одновременно в Windows 7?

    Как выделить строку в ListView в Android?

    Давайте будем гением компьютера.