博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R语言使用tryCatch进行简单的错误处理
阅读量:5864 次
发布时间:2019-06-19

本文共 1866 字,大约阅读时间需要 6 分钟。

最近在看《机器学习:实用案例解析》,做邮件过滤器的时候,参考书中的代码读取邮件文件进行分类器训练,在读取过程中会出现下面的错误:

 

 

seq.default(which(text == "")[1] + 1, length(text), 1) : 'from' cannot be NA, NaN or infinite

 

seq . default ( which ( text == "" ) [ 1 ] + 1 , length ( text ) , 1 )

: 'from' cannot be NA , NaN or infinite

看了一下,应该是读取文件的时候文件编码的问题,具体锁定的代码如下:

 

 

 

 

 

R

 

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")) }

 

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" ) )

}

懒得去研究是哪里的问题,加上我也是刚刚学习R,最简单的方法就是做一个错误处理,捕获错误然后处理了就OK,最简单的莫过于tryCatch了。找了一下,R中的tryCatch使用方法如下:

tryCatch

 

 

 

 

 

R

 

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

 

result = tryCatch ( {

expr

} , warning = function ( w ) {

warning - handler - code

} , error = function ( e ) {

error - handler - code

} , finally = {

cleanup - code

}

接下来就很简单了,把代码修改为下面的形式,问题解决:

 

 

 

 

 

R

 

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")) }

 

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" ) )

}

总的来说,遇到这个问题我只是用来最简单的方法跳过去了,如果是在真实的项目中,可能就需要去排查具体的问题,tryCatch只是用来预防一些极个别的错误情况用的方法。

转载地址:http://iwynx.baihongyu.com/

你可能感兴趣的文章
Linux df
查看>>
Python——getpass
查看>>
理解 Redis(5) - 哈希值
查看>>
【Node.js】Stream(流)的学习笔记
查看>>
Django 过滤器 、日期格式化、数学运算
查看>>
【总结整理】关于写前端页面小技巧
查看>>
java===java基础学习(6)---流程控制,for,if,switch,continue,break
查看>>
使用Node搭建reactSSR服务端渲染架构
查看>>
Android下VideoView的研究
查看>>
Maven中settings.xml的配置项说明
查看>>
文件缓存
查看>>
时间管理之“二”定律
查看>>
NYOJ71:独木舟上的旅行(简单贪心)
查看>>
新公司注册流程
查看>>
POJ - 1251 Jungle Roads(最小生成树)
查看>>
Fixflow引擎解析(五)(内核) - 基于Token驱动的引擎内核运转原理
查看>>
生成固定大小的占位图片
查看>>
jquery mobile selectmenu下拉菜单
查看>>
XC文件管理器-打造优美易用的文件管理器
查看>>
团队项目 NABCD分析java音乐播放器
查看>>