在R中使用parLapply(并行包)的TryCatch

use*_*393 6 parallel-processing r

我试图在一个非常大的数据集上运行一些东西.基本上,我想遍历文件夹中的所有文件并在其上运行fromJSON函数.但是,我希望它跳过产生错误的文件.我已经使用tryCatch构建了一个函数,但只有在我使用函数lappy而不是parLapply时才有效.

这是我的异常处理函数的代码:

readJson <- function (file) {
 require(jsonlite)
 dat <- tryCatch(
        {
         fromJSON(file, flatten=TRUE)      
        },
         error = function(cond) {
                 message(cond)
                 return(NA)
        },
         warning = function(cond) {
                  message(cond)
                  return(NULL)
                  }
   )
  return(dat)   
}
Run Code Online (Sandbox Code Playgroud)

然后我在包含JSON文件的完整路径的字符向量文件上调用parLapply :

 dat<- parLapply(cl,files,readJson)
Run Code Online (Sandbox Code Playgroud)

当它到达一个未正确结束的文件时会产生错误,并且不会通过跳过有问题的文件来创建列表'dat'.这是readJson函数应该缓解的内容.

当我使用常规lapply,但它工作得很好.它会生成错误,但是,它仍然会跳过错误的文件来创建列表.

关于如何使用parLappy并行处理异常处理的任何想法,以便它会跳过有问题的文件并生成列表?

Luk*_*ney 3

在你的error处理函数中cond有一个错误条件。message(cond)发出这种情况的信号,该信号被工作线程捕获并作为错误传输给主线程。要么删除这些message调用,要么用类似的内容替换它们 message(conditionMessage(cond)) ,但您不会在主服务器上看到任何内容,因此删除可能是最好的选择。