R语言-处理异常值或报错的三个示例

R语言-处理异常值或报错的三个示例

之前用rvest帮人写了一个定期抓取amazon价格库存,并与之前价格比较的小程序,算是近期写过的第一个完整的程序了。里面涉及了一些报错的处理。

这里主要参考了stackoverflow上的以下问答:
How to skip an error in a loop
skip to next value of loop upon error in R
tryCatch部分,后续查找资料,发现以下博文: 1. R语言使用tryCatch进行简单的错误处理

以下是代码示例:

1)使用tryCatch函数跳过错误信息。(示例以download.file为样式)

看以下代码。这里需要批量下载一堆amazon产品信息。如果产品ID号不对,或者IP被限制,网页会打不开,而download.file会报错。我这里用tryCatch来获取网页打不开时的错误信息。并且要求执行下一步循环“”。

复制代码
for (n in 1:length(productlink)){
        tryCatch({
        download.file(productlink[n],paste0(getwd(),"/html/",productid[n,],".html"),cacheOK = TRUE)
        },error=function(e){cat("ERROR :",conditionMessage(e),"\n")})
        Sys.sleep(0.5) #增加了Sys.sleep(seconds)函数,让每一步循环都暂停一段时间。这个虽然会降低程序速度,但对于有访问限制的网站,不失为一个好的办法。
}
复制代码
上述示例由两个重要函数构成,即tryCatch和cat
查阅函数,tryCatch属于base包,condition system。在R语言使用tryCatch进行简单的错误处理这篇博文里有tryCatch的简单示范如下:

复制代码
result = tryCatch(
        {expr}, 
        warning = function(w) {warning-handler-code}, 
        error = function(e) { error-handler-code}, 
        finally = {cleanup-code}
        )
即如果warning时,对warning怎么处理,如果error时对error怎么处理。如果没有任何条件吻合,则最后会输出expr里的内容。如果有final项的话,则会同时输出finally项以及expr项
复制代码
tryCatch({a<-"c"
        b<-"c"
        b==a},
        error=function(e){cat("hahaha",conditionMessage(e),"\n\n")},
        finally={print("ccc")})
[1] "ccc"
[1] TRUE

tryCatch({a<-"c"

         cc==a}, #cc不存在
        error=function(e){cat("hahaha",conditionMessage(e),"\n\n")},
        finally={print("ccc")})
hahaha object 'cc' not found 
复制代码
对于代码示例,即为,download成功则返回download内容,不成功则返回error=function(e){cat("ERROR :",conditionMessage(e),"\n")}
然后是cat函数。这个cat是一个输入输出值。这里等于,要求系统输出“ERROR :”+conditionMessage(e)的内容。然后用“”分行。
另外,在stackoverflow上的这篇问答,由mmann1123回答的问题里,我们看到了更为有趣的一个应用。
这里收缩起来,展开亦可阅读。
 tryCatch示范
2)利用if语句以及stop语句。

即,如果某条件不成立,则停止程序,并输出stop里的内容。我这里主要用于检查原始product id是否输入正确。

if (!sum(check)==length(productlink)) {
        productlink<-NULL
        productid<-NULL
    stop("invalid productid please double check if any space or else in, and resave the file or the script will not run")
    }
 

3)处理使用data.frame批量读取数据时,元素因为不存在导致的data.frame报错。

譬如说以下示例,因为a不存在,而导致data.frame报错。

a<-NULL
b<-c("cc","dd")
data.frame(a,d)
> Error in data.frame(a, d) : 参数值意味着不同的行数: 0, 2
 因此,对于在循环里,需要先单独合成data.frame,再使用rbind把各个data.frame合成在一起时,可以考虑增加异常值的赋值。如下面两段,如果我拉的网页里不存在product name,则length(productname)==1为FALSE,直接输出“product not download or not existing”,那么这个字段就不是空值或者2-3个行,而是1行,之后合并为data.frame时就不会报错了。

复制代码
data<-function(n){
        ####隐掉获得productname/price/category的代码
        if(!length(productname)==1) {productname="Product not download or not existing"}
        if (!length(price)==1) {
                        price=NA 
                        category<-"Product not download or not existing"
        }
        data.frame(productname,price,category)
        #这里合成data.frame,如果这三个行数不等(多为空值NULL,或者某个字段有2-3行所导致。
        #使用上面的IF判断赋值的好处是,最后出来的productname,price,category保证是1行,可以用data.frame合并。并且对异常值也有输出。
复制代码
 由于处理第2/3类错误时我还不了解tryCatch函数。目前看下来,貌似tryCatch函数能做的事情更多?

写下来供以后写代码时参考。

另外,tryCatch在java,C里均有类似功效。看来R归根到底,还是脱离不了底层语言啊。

接下来4月的学习计划,学完一个就写一篇博文~~整理思路记录笔记。

1)rCurl包,以及它那个厚厚的英文说明书。希望最后能学会用它爬一些rvest无法爬的脚本网页,以及搜索框网页等

2)用R做金融时间序列分析(炼数成金的班)

3)跟着老师重新复习财务分析知识(mooc课),在复习过去的财务知识后,再重新来看预测者网下的股票数据,尝试做一下挖掘与分析,至少从宏观上了解当前中国上市公司的布局与特点,为以后用R研究股票打打基础。数据分析培训

转载于:https://www.cnblogs.com/amengduo/p/9587203.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联想e580没有声音_现在你可以购买通过 Linux 认证的联想 ThinkPad 和 ThinkStation

曾经有一段时间&#xff0c;ThinkPad 是 Linux 用户的首选系统。但那是在 ThinkPad 还是 IBM 的产品的时候。来源&#xff1a;https://linux.cn/article-12283-1.html作者&#xff1a;Abhishek Prakash译者&#xff1a;Xingyu.Wang曾经有一段时间&#xff0c;ThinkPad 是 Linux…

UC伯克利教授Stuart Russell人工智能基础概念与34个误区

来源&#xff1a;数据简化DataSimp数据简化DataSimp导读&#xff1a;UC伯克利教授StuartRussell人工智能基础概念与34个误区&#xff0c;Russell是加州大学伯克利分校人工智能系统中心创始人兼计算机科学专业教授&#xff0c;同时还是人工智能领域里「标准教科书」《人工智能&a…

装入归档文件时出现了一个错误linux_静态链接与动态链接(Linux)

前言上一篇分享了静态链接与动态链接的实验(Windows下)。这一篇分享Linux下的笔记&#xff0c;同时对上一篇笔记做一个补充。首先&#xff0c;我们把静态链接与动态链接做一个这样子的比喻&#xff1a;把链接过程看做我们平时学习时做笔记的过程。我们平时学习时准备一本笔记本…

c++ object model

对一个结构体进行不断的封装后可以形成一个c类&#xff0c;为此需要添加很多函数成员之类的代码&#xff0c;为此显示c比c语言显得庞大并且迟缓&#xff0c;但是事实并不是这些 c在布局和时间上的额外承担主要是由virtual引起的 下面简述c对象模型 数据成员包括静态成员和非静态…

9008刷机怎么刷_OV快捷进入高通进9008或fastboot模式刷机解锁,和MTK关机解锁

不喜略过。高通进9008刷机解锁&#xff1a;关机状态下&#xff0c;同时按音量下键上键插线进9008 .(注意安装手机驱动)高通进fastboot模式解锁&#xff1a;旧机型(平台上选择不到机型的)进fast解锁&#xff0c;关机状态 音量下键开机键 MTK关机解锁:关机状态下按音量上键&#…

10年内,19个关键技术将改变世界

来源&#xff1a; 科技联盟技术中心据国外媒体报道&#xff0c;从无人驾驶汽车到机器人工人&#xff0c;在我们熟悉所有这一切之前&#xff0c;未来正迎面走来。根据世界经济论坛全球议程理事会关于《未来软件与社会》的一份报告&#xff0c;到2025年前&#xff0c;很多新兴技术…

scope参数错误或没有scope权限_SSM 单体框架 - 前端开发:用户和权限模块

用户管理分页 & 条件查询用户数据查询条件1. 用户手机号 2. 注册时间,包含开始日期和结束日期日期选择器组件在查询条件中使用了 Element UI 中的日期选择器&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker#mo-ren-xian-shi-ri-qi在测试项目中创建一个…

武器化道路越走越远的无人机

来源&#xff1a;雷擎科技在数以千计的军用无人机中&#xff0c;绝大部分都用于监视。国防专家预测这种情况将会一直存在。Janes的分析师预计&#xff0c;在未来10年内&#xff0c;全球将购买超过80,000架监视无人机和近2,000架攻击无人机。武器化的无人机并不便宜。专家表示&a…

怎样查看cudnn版本_ubuntu16.04+Geforce GTX1060安装CUDA和cuDNN

DELL G7系列&#xff0c;ubuntu16.04&#xff0c;本机显卡型号: GeForce GTX 1060。主要步骤如下&#xff1a;一&#xff0c;安装NVIDIA驱动。1&#xff0c;本笔记本是F12进入BIOS&#xff0c;将secure boot设置为disable。2&#xff0c;通过下面命令确保电脑上之前的nvidia驱动…

Unity3DGUI:Window

#pragma strictvar winRect:RectRect(30,100,150,200);var windowShow:booleantrue;function OnGUI () { windowShowGUI.Toggle(Rect(10,10,100,20),windowShow,"窗口显示"); if(windowShow) //参数&#xff1a;windowID&#xff0c;位置&#xff0c;回调函数&#x…

android分享文件分享结果_干货分享丨DM删除归档日志文件的多种方法

上一期我们讲解了DM数据库归档日志的切换&#xff0c;本期我们讲解DM数据库归档日志文件的删除。本章内容已在如下环境上测试&#xff1a;①操作系统&#xff1a;中标麒麟7&#xff1b;②数据库版本&#xff1a;达梦8&#xff1b;相关关键字&#xff1a;DM数据库、归档日志文件…

三个维度看全球半导体格局变迁

来源&#xff1a;世纪证券费城半导体指数&#xff08;SOX&#xff09; 的发展阶段反应了全球半导体的走势与兴衰更替。费半指数涵盖全球半导体设计、设备、制造、 材料等方向&#xff0c; 其走势可以是衡量全球半导体行业景气程度的主要指标。费城半导体指数发行于在 1993 年12…

alot英文怎么读_很多的英文怎么说

你知道吗?一起来学习一下吧!很多的英文&#xff1a;可数&#xff1a;a lot of, lots of, many不可数&#xff1a;a good/great deal of , a good/ great amount of两者皆可&#xff1a;a large quantity of, quantities of同义词辨析&#xff1a;a lot of 和 lots of &#xf…

用samba来创建windows下的文件共享

前言 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件&#xff0c;而SMB是Server Message Block的缩写&#xff0c;即为服务器消息块 &#xff0c;SMB主要是作为Microsoft的网络通讯协议&#xff0c;后来Samba将SMB通信协议应用到了Linux系统上&#xff0c;就形成了现…

go 微服务框架_清晰架构(Clean Architecture)的Go微服务

更新我最进对这个框架进行了重大升级&#xff0c;虽然所做的改动不大&#xff0c;但成效显著。这次更新修复了旧框架中的所有主要问题&#xff0c;尽管它的的主要项目结构和接口都没有改变&#xff0c;具体改动内容请参见清晰架构&#xff08;Clean Architecture&#xff09;的…

贝叶斯网络之父Judea Pearl力荐、LeCun点赞,这篇长论文全面解读机器学习中的因果关系...

来源&#xff1a;机器之心作者&#xff1a;Bernhard Schlkopf图灵奖得主、贝叶斯网络之父 Judea Pearl 曾自嘲自己是「AI 社区的反叛者」&#xff0c;因为他对人工智能发展方向的观点与主流趋势相反。Pearl 认为&#xff0c;尽管现有的机器学习模型已经取得了巨大的进步&#x…

了解Web及网络基础——《图解http》第一章

1. 现在已提出的三项WWW构建技术&#xff0c;分别是把SGML作为页面的文本标记语言的HTML&#xff1b;作为文档传递协议的HTTP&#xff1b;指定文档所在地址的URL&#xff08;统一资源定位符&#xff09;。* 2. 网络基础&#xff1a;TCP/IP。通常使用的网络是在TCP/IP协议族的基…

python中如何连接两个字符串_python字符串连接的N种方式总结

python中有很多字符串连接方式&#xff0c;今天在写代码&#xff0c;顺便总结一下&#xff1a;最原始的字符串连接方式&#xff1a;str1 str2python 新字符串连接语法&#xff1a;str1, str2奇怪的字符串方式&#xff1a;str1 str2% 连接字符串&#xff1a;‘name:%s; sex: %…

tomcat防cc_浅析Tomcat防止资料被锁的方式

在Windows平台的Tomcat上部署应用后&#xff0c;应用下的个别文件可能会被Tomcat锁住&#xff0c;解部署的时候删除不掉那些内容&#xff0c;就会导致无法重部署。如果解部署删除不掉被锁的文件&#xff0c;Tomcat会在日志中警告说&#xff1a;2013-1-9 15:44:09 org.apache.ca…

python怎么发送微信给自己_Python新手教程:Python微信定时自动给【女朋友】发送天气预报...

效果图主要思路1.从wxpy获取好友列表2.创建定时器3.定时器触发函数4.函数执行&#xff0c;遍历好友列表5.好友对象执行带参函数&#xff0c;参数为该好友城市6.函数中请求百度天气接口&#xff0c;得到该好友对应天气数据&#xff0c;解析处理数据&#xff0c;发送天气信息&…