R语言入门十三章、十四章.ppt_第1页
R语言入门十三章、十四章.ppt_第2页
R语言入门十三章、十四章.ppt_第3页
R语言入门十三章、十四章.ppt_第4页
R语言入门十三章、十四章.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十三章调试,案例:寻找连续为1的游程findruns10)runs-runs1:countelseruns-NULLreturn(runs)findruns1(c(1,0,0,1,1,0,0,1,1,1),2)134789显然,出错了,调试方法一:手动,在程序中添加多个print(),把程序的内部细节输出来查看是哪里出的问题。function(x,k)print(x)#输出xprint(k)#输出kn0)runsdebugatfindruns1.R#2:ndebugatfindruns1.R#3:runsprint(n)110Browse2debugatfindruns1.R#4:countdebugatfindruns1.R#5:for(iin1:(n-k+1)if(all(xi:i+k-1=1)countdebugatfindruns1.R#6:if(all(xi:i+k-1=1)countxi:i+k-1#出错10Browse2i:i+k-112Browse2i11Browse2k12Browse2Q#退出调试思考后可以发现,少加了括号。,source(findruns.R)findruns(c(1,0,0,1,1,0,0,1,1,1),2)1489正确。下面这个案例是用递归算法排序qs=pivotsv1-qs(sv1)sv2qs(a)debuggingin:qs(a)debugatqs.R#1:if(length(x)=pivotsv1x187294532Browse2length(x)16Browse2debugatqs.R#3:pivotpivotError:objectpivotnotfoundBrowse2debugatqs.R#4:therestpivot18Browse2debugatqs.R#5:sv1therest17294532,Browse2debugatqs.R#6:sv2=pivotBrowse2sv1172Browse2debugatqs.R#7:sv1sv2194532Browse2debugatqs.R#8:sv2sv1127Browse2debugatqs.R#9:return(c(sv1,pivot,sv2)Browse2sv2193245Browse2127893245看到每一步的结果,对程序的理解必然会更深刻。,第十四章性能提升:速度和内存,本章主要介绍通过向量化(相对for()循环,可以理解向量化的意思是处理长向量而不是把向量截成单个分别处理)的方式优化自己的R代码。当然,提升速度最好的方法永远是直接用C或C+编写代码。,x-runif(10000000)y-runif(10000000)z-vector(length=10000000)system.time(z-x+y)usersystemelapsed0.080.060.14system.time(for(iin1:length(x)zi-xi+yi)usersystemelapsed36.830.0636.89三个数字分别表示“用户”是消耗在应用程序(非操作系统部分)执行的时间,“系统”是底层操作系统执行(例如磁盘读写等)部分的时间,“流逝”是经过的总时间(可以认为是前两者的总和)。一般优化时主要关注“用户”的时间。可以看出,向量化的运行速度远远高于for()循环,下面是第八章出现的例子sum-0nreps-100000for(iin1:nreps)xy-rnorm(2)sum-sum+max(xy)print(sum/nreps)emax-function(nreps)x-rnorm(2*nreps)maxxy-pmax(x1:nreps,x(nreps+1):(2*nreps)return(mean(maxxy)emax(100000),system.time(source(MaxNorm.R)10.5628218usersystemelapsed0.720.000.74system.time(source(MaxNorm2.R)10.5678636usersystemelapsed0.030.000.03当然,速度的提升是以更多内存消耗为代价的,因为我们将所有的数据进行存储在计算,而不是每次生成一对取较大值后就丢失较小值。所以,时间和空间的权衡经常无法避免。,函数式拷贝和内存问题当R中已经创建的向量或向量的一个对象发生变化时,程序会在另一块内存区域创建一份整个对象拷贝,所以只有第一次改变赋值时会有消耗。但如果是列表或数据框就会每次都创建。z-1:10000000system.time(z3-8)usersystemelapsed0.060.000.06system.time(z33-88)usersystemelapsed000,m-5000n-1000z-list()for(iin1:m)zi-sample(1:10,n,replace=T)system.time(for(iin1:m)zi3-8)usersystem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论