Tom*_*aff 3 loops r list try-catch
我正在尝试解析数据帧列中包含的 JSON,其中一些已损坏。作为第一步,我想识别损坏的行,并使用它来对数据帧进行子集化。
我正在使用这篇文章中的技巧来c()填充列表(尽管我知道它很慢):
myRows <- c()
for (i in 1:nrow(myDataframe)) {
tryCatch({myDataframe$myJSONstring[i] %>%
fromJSON() %>%
length()},
error = function(e) {print(i); myRows <- c(myRows, i)})
}
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。print(i)工作正常,但运行循环后myRows仍然只是一个空列表。tryCatch 的错误位中可以运行的代码是否有一些限制?
虽然已经有一个公认的答案,但我会以另一种方式发布,而不创建环境。
如果将结果tryCatch赋值给变量,则可以稍后进行测试。诀窍是在错误函数中返回错误。
基于接受的答案的示例,相同的错误。
vec <- rep(1:0, each = 5)
ans <- lapply(seq_along(vec), function(i) {
tryCatch({ if(vec[i]) stop("error message") else "success" },
error = function(e) e)
})
bad <- sapply(ans, inherits, "error")
#[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)