如何使用R在for循环中实现tryCatch()

时间:2018-10-25 19:11:07

标签: r

我已经使用for()循环编写了R代码,该循环读取了存储在excel工作表的R列中的一些查询,命中服务器并将检索到的响应保存在文本文件中。该代码运行良好,直到服务器响应错误并停止循环执行为止。我尝试在代码中实现tryCatch(),但实现得不好。

请帮助我在代码中实现tryCatch(),这样可以将错误保存在其他文件中,并可以继续进行for()循环。

代码:

for (i in 1:R_column_len){
        R_column_data <- (file_data[[6]][i])
      a <- eval(parse(text = R_column_data))
      write.table(a,file = sprintf("C:/Results/F_Query_Prod_%s.txt", i))
    }

1 个答案:

答案 0 :(得分:2)

也许这说明了一般想法

.Tags[]
| select(.Key == "Application")
| "\(.Key) : \(.Value)"

产生输出

library(futile.logger)

f <- function() {
    for (i in 1:10) {
        tryCatch({
            if (i %% 3 == 0)
                stop("my bad")
            ## normal behavior
            flog.info("i = %d", i)
        }, error = function(e) {
            ## error behavior
            flog.error("oops, i = %d: %s", i, conditionMessage(e))
        })
    }
}

使用futile.logger的功能附加到文件而不是控制台,并仅记录错误

> f()
INFO [2018-10-25 15:50:05] i = 1
INFO [2018-10-25 15:50:05] i = 2
ERROR [2018-10-25 15:50:05] oops, i = 3: my bad
INFO [2018-10-25 15:50:05] i = 4
INFO [2018-10-25 15:50:05] i = 5
ERROR [2018-10-25 15:50:05] oops, i = 6: my bad
INFO [2018-10-25 15:50:05] i = 7
INFO [2018-10-25 15:50:05] i = 8
ERROR [2018-10-25 15:50:05] oops, i = 9: my bad
INFO [2018-10-25 15:50:05] i = 10

结果是

fl <- tempfile()
flog.appender(appender.file(fl))
flog.threshold(ERROR)
f()