for-loop에서 오류 건너뛰기
6000 X 180 매트릭스에 대한 180 그래프(열당 1 그래프)를 생성하기 위해 for 루프를 수행하고 있는데, 일부 데이터가 내 기준에 맞지 않아 다음 오류가 발생합니다.
"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")})
}
간단한 방법이 있습니다.
for (i in 1:10) {
skip_to_next <- FALSE
# Note that print(b) fails since b doesn't exist
tryCatch(print(b), error = function(e) { skip_to_next <<- TRUE})
if(skip_to_next) { next }
}
루프는 오류에도 불구하고 10회 반복을 모두 완료합니다.당신은 분명히 대체할 수 있습니다.print(b)
당신이 원하는 어떤 코드로도.또한 여러 줄의 코드를 줄바꿈할 수 있습니다.{
그리고.}
내부에 코드 줄이 두 개 이상 있는 경우tryCatch
언급URL : https://stackoverflow.com/questions/14748557/skipping-error-in-for-loop
'programing' 카테고리의 다른 글
jquery: ID가 특정 패턴인 요소 찾기 (0) | 2023.06.17 |
---|---|
기존 JSON 문서에 배열 값을 삽입하는 방법은 무엇입니까? (0) | 2023.06.17 |
파이썬에서 두 번 빼기 (0) | 2023.06.17 |
32비트 또는 64비트에 따라 데이터 유형 또는 구조의 크기는 누가 결정합니까? (0) | 2023.06.17 |
(오라클)페이지화 쿼리를 사용할 때 총 결과 수를 가져오는 방법은 무엇입니까? (0) | 2023.06.17 |