programing

for-loop에서 오류 건너뛰기

powerit 2023. 6. 17. 09:46
반응형

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

반응형