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并行处理异常处理的任何想法,以便它会跳过有问题的文件并生成列表?
在你的error处理函数中cond有一个错误条件。message(cond)发出这种情况的信号,该信号被工作线程捕获并作为错误传输给主线程。要么删除这些message调用,要么用类似的内容替换它们
message(conditionMessage(cond))
,但您不会在主服务器上看到任何内容,因此删除可能是最好的选择。