R:在 tryCatch 的循环中添加元素到列表

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 的错误位中可以运行的代码是否有一些限制?

Rui*_*das 5

虽然已经有一个公认的答案,但我会以另一种方式发布,而不创建环境。
如果将结果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)