Ошибка пропуска в петле
Я делаю цикл for для генерации 180 графиков для моей матрицы 6000 X 180 (1 граф на столбец), некоторые данные не соответствуют моим критериям, и я получаю ошибку:
"Error in cut.default(x, breaks = bigbreak, include.lowest = T) 'breaks' are not unique".
Я в порядке с ошибкой, я хочу, чтобы программа продолжала работу цикла for, и дала мне список столбцов, сделавших эту ошибку (как переменная, содержащая имена столбцов, возможно?).
Вот моя команда:
- Для vs. while в программировании на C?
- Для каждого символа в строке
- Ошибка производительности для vector :: size () в цикле
- В чем разница между ++ i и i ++?
- Есть ли разница в производительности между циклами for и циклом for-each?
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, и никто из них не работал для меня (или, по крайней мере, я не мог правильно применить эту функцию). Файл справки также не очень помог.
Помощь была бы оценена. Благодарю.
- Замедленная точка с запятой в цикле
- Где GOTO: EOF возвращается?
- Зацикливание объекта datetime приводит к числовому iteratorу
- В чем разница между итерацией по файлу с помощью foreach или в Perl?
- Java 8 Iterable.forEach () vs foreach loop
- Какая петля быстрее, пока или для?
- Есть ли способ сделать n-уровневые вложенные циклы в Java?
- В .NET, какой цикл работает быстрее, «for» или «foreach»?
Один (грязный) способ сделать это – использовать 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()
Если разрывы уникальны), и только запишите ее для тех случаев, когда она не появится? !