05月14, 2016

R语言的异常处理

R语言异常处理

之前查找R语言异常处理的资料,总是没有自习看下去,结果这一次真的逃不过了,还好网上找到一篇简单明了的,和我经历都一样,也是在看《机器学习:实用案例解析》,也是和我一样的想法,不想处理,只对错误置之不理而已,只要错误不打断我的程序运行。

不吐槽,直接上代码,注意{}不要漏掉,

result = tryCatch({
    expr
}, warning = function(w) {
    warning-handler-code
}, error = function(e) {
    error-handler-code
}, finally = {
    cleanup-code
})

原来出错的代码如下,主要是text[seq(which(text == "")[1] + 1, length(text), 1)]这一行代码会报错,

get.msg <- function(path)
{
  con <- file(path, open = "rt", encoding = "latin1")
  text <- readLines(con)
  msg <- text[seq(which(text == "")[1] + 1, length(text), 1)]
  close(con)
  return(paste(msg, collapse = "\n"))
}

加上异常处理,其实只要把容易出错的代码加入到tryCatch()就好了,如下:

get.msg <- function(path)
{
  con <- file(path, open = "rt", encoding = "latin1")
  text <- readLines(con)
  msg <- tryCatch({
    text[seq(which(text == "")[1] + 1, length(text), 1)]
  }, error = function(e) {
    ""
  })
  close(con)
  return(paste(msg, collapse = "\n"))
}

我的代码

是的,这一次也看了一下并行,网上有测试说foreach在循环数量很大的时候性能不如原生的parallel

system.time({
  cl<-makeCluster(3)
  registerDoParallel(cl)
  final<-foreach(x=1:50000,.combine ="bind_rows" ) %dopar% tryCatch({func(x)},warning=function(w){},error=function(e){""})
  stopCluster(cl)
})

参考

本文链接:https://blog.cosli.top/post/R语言的异常处理.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。