Hei*_*erg 2 error-handling r lapply
回答有关 lapply始终返回错误处理NA或NULL元素失败时的错误处理问题,即
myfun <- function(s) {
tryCatch(doSomething(s), error = function(e) { return(NULL) }
}
Run Code Online (Sandbox Code Playgroud)
然而,这还不够普遍,因为doSomething(s)可能会返回NULL或NA本身。因此,理想情况下,我希望myfun编写这样的内容,以便lapply(mylist, myfun)我能够以某种方式获得失败元素的所有索引。这个怎么做?
通过处理错误来捕获并释放错误identity()
res = lapply(list(1, "two", 3), function(i) tryCatch({
sqrt(i)
}, error=identity)
Run Code Online (Sandbox Code Playgroud)
检查是否有错误
vapply(res, is, logical(1), "error")
Run Code Online (Sandbox Code Playgroud)
返回错误条件通常比返回“神奇”值(如NA或 )更好NULL,除非下游分析与返回值无缝配合。
作为更高级的解决方案,创建更复杂的条件或扩展错误类
my_condition = function(err)
structure(list(message=conditionMessage(err),
original=err), class=c("my", "condition"))
Run Code Online (Sandbox Code Playgroud)
并返回
res <- lapply(list(1, "two", 3), function(i) {
tryCatch({
sqrt(i)
}, error=my_condition)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |