在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
之前用rvest帮人写了一个定期抓取amazon价格库存,并与之前价格比较的小程序,算是近期写过的第一个完整的程序了。里面涉及了一些报错的处理。
这里主要参考了stackoverflow上的以下问答:
How to skip an error in a loop skip to next value of loop upon error in R tryCatch部分,后续查找资料,发现以下博文: 1. 以下是代码示例: 1)使用tryCatch函数跳过错误信息。(示例以download.file为样式) 看以下代码。这里需要批量下载一堆amazon产品信息。如果产品ID号不对,或者IP被限制,网页会打不开,而download.file会报错。我这里用tryCatch来获取网页打不开时的错误信息。并且要求执行下一步循环“”。 复制代码 for (n in 1:length(productlink)){ } 复制代码 上述示例由两个重要函数构成,即tryCatch和cat 查阅函数,tryCatch属于base包,condition system。在R语言使用tryCatch进行简单的错误处理这篇博文里有tryCatch的简单示范如下: 复制代码 result = tryCatch( 即如果warning时,对warning怎么处理,如果error时对error怎么处理。如果没有任何条件吻合,则最后会输出expr里的内容。如果有final项的话,则会同时输出finally项以及expr项 复制代码 tryCatch({a<-"c" [1] "ccc" [1] TRUE tryCatch({a<-"c" hahaha object 'cc' not found 复制代码 对于代码示例,即为,download成功则返回download内容,不成功则返回error=function(e){cat("ERROR :",conditionMessage(e),"\n")} 然后是cat函数。这个cat是一个输入输出值。这里等于,要求系统输出“ERROR :”+conditionMessage(e)的内容。然后用“”分行。 另外,在stackoverflow上的这篇问答,由mmann1123回答的问题里,我们看到了更为有趣的一个应用。 这里收缩起来,展开亦可阅读。 2)利用if语句以及stop语句。 即,如果某条件不成立,则停止程序,并输出stop里的内容。我这里主要用于检查原始product id是否输入正确。 if (!sum(check)==length(productlink)) { 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<-function(n){ 复制代码 写下来供以后写代码时参考。 另外,tryCatch在java,C里均有类似功效。看来R归根到底,还是脱离不了底层语言啊。 接下来4月的学习计划,学完一个就写一篇博文~~整理思路记录笔记。 1)rCurl包,以及它那个厚厚的英文说明书。希望最后能学会用它爬一些rvest无法爬的脚本网页,以及搜索框网页等 2)用R做金融时间序列分析(炼数成金的班) 3)跟着老师重新复习财务分析知识(mooc课),在复习过去的财务知识后,再重新来看预测者网下的股票数据,尝试做一下挖掘与分析,至少从宏观上了解当前中国上市公司的布局与特点,为以后用R研究股票打打基础。数据分析培训 |
请发表评论