R语言入门十三章、十四章

R语言入门十三章、十四章

ID:45077716

大小:258.84 KB

页数:21页

时间:2019-11-09

R语言入门十三章、十四章_第1页
R语言入门十三章、十四章_第2页
R语言入门十三章、十四章_第3页
R语言入门十三章、十四章_第4页
R语言入门十三章、十四章_第5页
资源描述:

《R语言入门十三章、十四章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十三章调试案例:寻找连续为1的游程findruns1<-function(x,k){n<-length(x)runs<-vector(length=n)count<-0for(iin1:(n-k+1)){if(all(x[i:i+k-1]==1)){count<-count+1runs[count]<-i}}if(count>0){runs<-runs[1:count]}elseruns<-NULLreturn(runs)}findruns1(c(1,0,0,1,1,0,0,1,1,1),2)[1]34789显然,出错了调试方法一:手动,在程

2、序中添加多个print(),把程序的内部细节输出来查看是哪里出的问题。function(x,k){print(x)#输出xprint(k)#输出kn<-length(x)print(n)#输出nruns<-vector(length=n)count<-0for(iin1:(n-k+1)){if(all(x[i:i+k-1]==1)){count<-count+1runs[count]<-iprint(runs)#输出循环的每一步}}if(count>0){runs<-runs[1:count]print(runs)#输出结果}elseruns<

3、-NULLreturn(runs)}findruns1(c(1,0,0,1,1,0,0,1,1,1),2)[1]1001100111#正确[1]2#正确[1]10#正确[1]3000000000#出错!![1]3400000000[1]3470000000[1]3478000000[1]3478900000[1]34789[1]34789可以看出,从把实参带入形参,到建立长度等于x长度d的向量,都是正确的。错误开始于循环的第一步。因此我们应该去检查循环语句,不难发现,问题出在all(x[i:i+k-1]==1)中,我们没有把i+k-1扩起来。调

4、试方法二:使用R的调试工具在代码中插入print()显然比较繁琐,特别是程序较长的时候,使用R的调试工具会更便捷。R的核心调试工具有浏览器构成,它可以让你逐行运行代码,并在运行过程中检查,可以用dubug(f)或browser()打开这个浏览器。debug(f)函数可以把函数f()设置成调试状态,意味着每次调用f()都会进入这一状态,取消这一状态需调用undebug(f)。在2.10版本之后,可以用debugonce()代替(检查漏洞一次)。debugonce(findruns1)findruns1(c(1,0,0,1,1,0,0,1,1,1)

5、,2)然后开始调试….Browse[2]>x[1]1001100111Browse[2]>debugatfindruns1.R#2:n<-length(x)Browse[2]>debugatfindruns1.R#3:runs<-vector(length=n)Browse[2]>print(n)[1]10Browse[2]>debugatfindruns1.R#4:count<-0Browse[2]>debugatfindruns1.R#5:for(iin1:(n-k+1)){if(all(x[i:i+k-1]==1)){count<-cou

6、nt+1runs[count]<-i}}Browse[2]>debugatfindruns1.R#5:iBrowse[2]>debugatfindruns1.R#6:if(all(x[i:i+k-1]==1)){count<-count+1runs[count]<-i}Browse[2]>x[i:i+k-1]#出错[1]0Browse[2]>i:i+k-1[1]2Browse[2]>i[1]1Browse[2]>k[1]2Browse[2]>Q#退出调试思考后可以发现,少加了括号。source("findruns.R")>findruns(c(

7、1,0,0,1,1,0,0,1,1,1),2)[1]489正确。下面这个案例是用递归算法排序qs<-function(x){if(length(x)<=1)return(x)pivot<-x[1]therest<-x[-1]sv1<-therest[therest=pivot]sv1<-qs(sv1)sv2<-qs(sv2)return(c(sv1,pivot,sv2))}a<-c(8,7,2,9,45,32)source("qs.R")>a<-c(8,7,2,9,45,32)>qs(a)

8、[1]27893245结果是正确的,但运算过程是比较让人费解的。本人要说明的是,调试工具不仅可以找错,也可以帮助理解程序的运行过程。debugonce

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。