홈>
lapply
를 사용하고 있습니다
많은 수의 항목에 대해 복잡한 기능을 실행하고 각 항목의 출력 (있는 경우)을 생성 된 경고/오류와 함께 저장하여 어떤 항목이 어떤 경고/오류를 생성했는지 알 수 있도록하고 싶습니다.
withCallingHandlers
를 사용하여 경고를 잡는 방법을 찾았습니다
( 여기에 설명 ). 그러나 오류도 잡아야합니다.
tryCatch
에 싸서 할 수 있어요
(아래 코드와 같이) 더 좋은 방법이 있습니까?
catchToList <- function(expr) {
val <- NULL
myWarnings <- NULL
wHandler <- function(w) {
myWarnings <<- c(myWarnings, w$message)
invokeRestart("muffleWarning")
}
myError <- NULL
eHandler <- function(e) {
myError <<- e$message
NULL
}
val <- tryCatch(withCallingHandlers(expr, warning = wHandler), error = eHandler)
list(value = val, warnings = myWarnings, error=myError)
}
이 기능의 샘플 출력은 다음과 같습니다 :
> catchToList({warning("warning 1");warning("warning 2");1})
$value
[1] 1
$warnings
[1] "warning 1" "warning 2"
$error
NULL
> catchToList({warning("my warning");stop("my error")})
$value
NULL
$warnings
[1] "my warning"
$error
[1] "my error"
tryCatch
를 논의하기 위해 여기에 몇 가지 질문이 있습니다.
오류 처리,하지만이 특정 문제를 해결하는 것을 찾지 못했습니다. 함수 호출로 인해 경고가 발생하는지 어떻게 확인할 수 있습니까? , warnings ()가 함수 내에서 작동하지 않습니까? 이 문제를 어떻게 해결할 수 있습니까? 및 오류를 무시하고 목록에서 다음 사항을 처리하도록 lapply에 알리는 방법 가장 관련성 높은 것들을 위해
- 답변 # 1
- 답변 # 2
평가판을 사용해보십시오.
library(evaluate) test <- function(i) switch(i, "1"=stop("oops"), "2"={ warning("hmm"); i }, i) t1 <- evaluate("test(1)") t2 <- evaluate("test(2)") t3 <- evaluate("test(3)")
현재 표현을 평가할 수있는 좋은 방법이 부족하다. 이것은 주로 콘솔에서 R 출력에 주어진 텍스트 입력을 정확히 재현하는 것을 목표로하기 때문이다.
replay(t1) replay(t2) replay(t3)
또한 메시지를 캡처하고 콘솔에 출력하며 모든 것이 발생한 순서대로 올바르게 인터리브되도록합니다.
관련 자료
- c# - 별도의 타이머를 사용하여 오류와 경고를 추가하고 잠시 후 둘 다 제거 할 수 있습니다
- db2 luw - DB2 LUW-Json_Table 함수 구문 오류
- python - Pytorch에서 앞으로 함수는 정확히 무엇을 출력합니까?
- javascript - 잘못된 출력을 표시하는 map () 및 push ()를 사용하는 함수
- 입력이 null 인 경우 함수가 null 만 출력한다고 TypeScript에 알릴 수 있습니까?
- python - Pandas 데이터 프레임에 새 열로 여러 필드를 반환하는 함수 호출의 출력을 추가/삽입하는 방법은 무엇입니까?
- r - 함수 호출의 회귀가 함수 외부의 회귀와 동일한 출력을 반환하지 않습니다
- r - 함수 내부의 if 문에서 NULL 출력을 억제합니다
- javascript - 예상 된 출력이 아닌 기능 텍스트를 출력하는 함수
- python - 함수 내의 루프에서 벡터/배열 출력을 얻는 방법은 무엇입니까?
- javascript - 비동기 함수에서 비동기 함수의 오류 잡기
- bash - 사양 파일 내에서 사용되는 쉘 함수의 출력 가져 오기
- javascript - ''또는""또는`${}`를 사용하는 JS 함수 다른 출력에 대한 인수
- recursion - 누군가가 왜 출력, C ++ 재귀 함수인지 설명해 줄 수 있습니까?
- c - 예기치 않은 출력 -scanf 및 기능 검사
- javascript - for 루프가 비동기 함수에서 부분 출력을 제공합니다
- C ++의 구조와 결합 된 함수의 출력 및 사용에 관한 질문
- Python Caesar 함수 잘못된 출력
- 빈 값에서 Terraform 보간 기능 "결합"오류 발생
관련 질문
- r : 이항의 오류 (링크= ...) -do.call 함수
- r : 패널 밸런스드 데이터는 불균형 패널 데이터로 표시됩니다. "make.pbalanced ()"및 "is.pbalanced ()"를 사용할 수 없습니다.
- javascript : async await에서 try-catch 내부에서 'throw error'를 처리하는 데 문제가 있습니까?
- R-Rselenium 표현식을 트랩 할 때 콘솔에 try () 출력을 억제합니다.
- R의 sf 패키지 문제 : 어떻게 해결할 수 있습니까?
- 잡은 JavaScript 오류의 줄과 열 번호를 찾는 방법이 있습니까?
아마도 이것은 당신의 해결책과 동일하지만, 나는
factory
를 썼습니다. 평범한 오래된 함수를 값, 오류 및 경고를 캡처하는 함수로 변환하여값, 오류 및/또는 경고가 포함 된 결과의 각 요소 사용자 기능, 시스템 기능 또는 익명 기능 (
factory(function(i) ...)
)에서 작동합니다. ). 여기 공장이 있습니다결과 목록을 다루는 일부 도우미