2014-12-22 2 views
1

나는 루프 내에서 행렬이 만들어지는 아래의 것과 유사한 기능을 가지고 있습니다.오류 메시지 뒤에 자세한 내용 추가 R

foo <- function(x, y, z) { 
    out <- list(a1 = NULL, a2 = NULL, a3 = NULL) 
    for (i in 1:3) { 
    t <- 100 * i 
    a <- matrix(x, y + t, z) 
    out[[i]] <- t(a) 
    } 
    return(out) 
} 

다음과 같이 정상적으로 실행됩니다. P < - foo는 (NA, 100, 50)

그러나 다음은

q <- foo(NA, 3500000, 50) 

가 나는 그들이 발생할 때마다 cannot allocate vector of length 또는 too many elements specified 오류 후 adjust arguments 'y' and 'z' 같은 몇 가지 추가 message을 추가 할 cannot allocate vector of length 오류를 준다 내 기능.

나는 trytryCatch을 시도하고 있지만 루프 내에서 오류가 발생하면 원하는 결과를 얻지 못하는 것 같습니다. 이 작업을 수행하는 방법?

+1

시도한'try' 및'tryCatch' 코드가 있습니까? 그리고이 테스트에서 정확한 "원하는 결과"가 무엇인지 지정할 수 있습니까? – MrFlick

+0

함수가 'Error : size of vector를 할당 할 수 없습니다'또는 '너무 많은 요소를 지정했습니다'와 함께 멈 추면'arguments를 'y'와 'z'로 조정하십시오. – Crops

답변

4

당신은 간단한 장식 패턴 오류 메시지를 풍부하게 할 수 있습니다

safify <- function(f){ 
    function(...){ 
     tryCatch({ 
      f(...) 
     }, 
     error=function(e){ 
      msg=conditionMessage(e) 
      if(grepl("cannot allocate", msg)){ 
       msg=paste(msg, " Adjust arguments 'y' and 'z'", sep='.') 
       return(msg) 
      } 
      msg 
     }) 
    } 
} 

safefoo = safify(foo) 

#res=safefoo(NA, 3500000, 50) 
#> res 
#[1] "cannot allocate vector of size 667.6 Mb. Adjust arguments 'y' and 'z'" 

당신이 발생할 수있는 오류의 모든 유형을 잡아 당신이 원하는 일을 풍요롭게이 방법.