반응형
함수 호출로 인해 경고가 발생하는지 어떻게 확인할 수 있습니까?
R에서 함수 호출로 인해 경고가 발생하는지 어떻게 확인할 수 있습니까?
즉, 함수를 호출 한 후 해당 호출의 인스턴스가 경고를 생성했는지 여부를 알고 싶습니다.
try
구성 을 사용하려는 경우 경고 옵션을 설정할 수 있습니다. 을 (를) 참조하십시오 ?options
. 사용하는 것이 더 좋습니다 tryCatch()
.
x <- function(i){
if (i < 10) warning("A warning")
i
}
tt <- tryCatch(x(5),error=function(e) e, warning=function(w) w)
tt2 <- tryCatch(x(15),error=function(e) e, warning=function(w) w)
tt
## <simpleWarning in x(5): A warning>
tt2
## [1] 15
if(is(tt,"warning")) print("KOOKOO")
## [1] "KOOKOO"
if(is(tt2,"warning")) print("KOOKOO")
결과와 경고를 모두 얻으려면 다음을 수행하십시오.
tryCatch(x(5),warning=function(w) return(list(x(5),w)))
## [[1]]
## [1] 5
##
## [[2]]
## <simpleWarning in x(5): A warning>
사용 try
op <- options(warn=2)
tt <- try(x())
ifelse(is(tt,"try-error"),"There was a warning or an error","OK")
options(op)
R-help 메일 링리스트 ( http://tolstoy.newcastle.edu.au/R/help/04/06/0217.html 참조 )에서 Luke Tierney는 다음과 같이 썼습니다.
"값을 계산하고 모든 경고를 수집하는 함수를 작성하려면 다음과 같이 할 수 있습니다.
withWarnings <- function(expr) {
myWarnings <- NULL
wHandler <- function(w) {
myWarnings <<- c(myWarnings, list(w))
invokeRestart("muffleWarning")
}
val <- withCallingHandlers(expr, warning = wHandler)
list(value = val, warnings = myWarnings)
}
다음은 예입니다.
testit <- function() warning("testit") # function that generates warning.
assign("last.warning", NULL, envir = baseenv()) # clear the previous warning
testit() # run it
if(length(warnings())>0){ # or !is.null(warnings())
print("something happened")
}
어쩌면 이것은 간접적 일 수도 있지만 더 간단한 방법을 모르겠습니다.
2019 업데이트
출력, 결과, 경고 및 오류 목록을 반환하는 purrr 패키지에서 '조용히'를 사용할 수 있습니다. 그런 다음 각 요소를 이름으로 추출 할 수 있습니다. 예를 들어 함수를 매핑하려는 목록이 있고 경고를 반환 한 요소를 찾으면 다음을 수행 할 수 있습니다.
library(purrr)
library(lubridate)
datelist <- list(a = "12/12/2002", b = "12-12-2003", c = "24-03-2005")
# get all the everything
quiet_list <- map(datelist, quietly(mdy))
# find the elements which produced warnings
quiet_list %>% map("warnings") %>% keep(~ !is.null(.))
# or
quiet_list %>% keep(~ length(.$warnings) != 0)
이 예제에서는 매우 사소하지만 NA를 찾기 어려울 수있는 긴 데이터 프레임 목록의 경우 매우 유용합니다.
반응형
'IT이야기' 카테고리의 다른 글
jQuery : src로 이미지를 찾는 방법 (0) | 2021.04.16 |
---|---|
sqlite (3.6.21) 테이블에서 제약 조건 삭제 (0) | 2021.04.16 |
USB 드라이브가 연결되어 있는지 확인하는 방법 (0) | 2021.04.15 |
libgmp-10.dll이 누락되었습니다. (0) | 2021.04.15 |
빈 Seq에 대한 Option [T]의 최소 / 최대? (0) | 2021.04.15 |