R语言入门十三章十四章

上传人:平*** 文档编号:47515881 上传时间:2018-07-02 格式:PPT 页数:21 大小:44.36KB
返回 下载 相关 举报
R语言入门十三章十四章_第1页
第1页 / 共21页
R语言入门十三章十四章_第2页
第2页 / 共21页
R语言入门十三章十四章_第3页
第3页 / 共21页
R语言入门十三章十四章_第4页
第4页 / 共21页
R语言入门十三章十四章_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《R语言入门十三章十四章》由会员分享,可在线阅读,更多相关《R语言入门十三章十四章(21页珍藏版)》请在金锄头文库上搜索。

1、第十三章调试案例:寻找连续为1的游程findruns10)runs0)runs x1 1 0 0 1 1 0 0 1 1 1 Browse2 debug at findruns1.R#2: n debug at findruns1.R#3: runs print(n) 1 10 Browse2 debug at findruns1.R#4: count debug at findruns1.R#5: for (i in 1:(n - k + 1) if (all(xi:i + k - 1 = 1) count debug at findruns1.R#5: i Browse2 debug at

2、 findruns1.R#6: if (all(xi:i + k - 1 = 1) count xi:i+k-1 #出错 1 0 Browse2 i:i+k-1 1 2 Browse2 i 1 1 Browse2 k 1 2 Browse2 Q #退出调试 思考后可以发现,少加了括号。source(“findruns.R“) findruns(c(1,0,0,1,1,0,0,1,1,1),2) 1 4 8 9正确。下面这个案例是用递归算法排序 qs=pivot sv1 a qs(a) 1 2 7 8 9 32 45结果是正确的,但运算过程是比较让人费解的。本 人要说明的是,调试工具不仅可以找错

3、,也可以帮 助理解程序的运行过程。 debugonce(qs) qs(a) debugging in: qs(a) debug at qs.R#1: if (length(x) = pivotsv1 debug at qs.R#2: if (length(x) debug at qs.R#2: NULL Browse2 x 1 8 7 2 9 45 32 Browse2 length(x) 1 6 Browse2 debug at qs.R#3: pivot pivot Error: object pivot not found Browse2 debug at qs.R#4: therest

4、 pivot 1 8 Browse2 debug at qs.R#5: sv1 therest 1 7 2 9 45 32Browse2 debug at qs.R#6: sv2 = pivot Browse2 sv1 1 7 2 Browse2 debug at qs.R#7: sv1 sv2 1 9 45 32 Browse2 debug at qs.R#8: sv2 sv1 1 2 7 Browse2 debug at qs.R#9: return(c(sv1, pivot, sv2) Browse2 sv2 1 9 32 45 Browse2 1 2 7 8 9 32 45看到每一步的

5、结果,对程序的理解必然会更深刻。第十四章性能提升:速度和内存本章主要介绍通过向量化(相对for()循环,可 以理解向量化的意思是处理长向量而不是把 向量截成单个分别处理)的方式优化自己的R 代码。当然,提升速度最好的方法永远是直 接用C或C+编写代码。x-runif(10000000)y-runif(10000000)z-vector(length=10000000)system.time(z-x+y)user system elapsed 0.08 0.06 0.14 system.time(for(i in 1:length(x)zi-xi+yi)user system elapsed 3

6、6.83 0.06 36.89 三个数字分别表示“用户”是消耗在应用程序(非操作系统部分)执 行的时间,“系统”是底层操作系统执行(例如磁盘读写等)部分的 时间,“流逝”是经过的总时间(可以认为是前两者的总和)。一般 优化时主要关注“用户”的时间。可以看出,向量化的运行速度远远高于for()循环下面是第八章出现的例子 sum-0 nreps-100000 for(i in 1:nreps) xy-rnorm(2) sum-sum+max(xy) print(sum/nreps)emax-function(nreps) x-rnorm(2*nreps) maxxy-pmax(x1:nreps,x

7、(nreps+1):(2*nreps) return(mean(maxxy) emax(100000)system.time(source(“MaxNorm.R“) 1 0.5628218user system elapsed 0.72 0.00 0.74 system.time(source(“MaxNorm2.R“) 1 0.5678636user system elapsed 0.03 0.00 0.03 当然,速度的提升是以更多内存消耗为代价的,因 为我们将所有的数据进行存储在计算,而不是每次 生成一对取较大值后就丢失较小值。所以,时间和 空间的权衡经常无法避免。函数式拷贝和内存问题当

8、R中已经创建的向量或向量的一个对象发生变 化时,程序会在另一块内存区域创建一份整个 对象拷贝,所以只有第一次改变赋值时会有消 耗。但如果是列表或数据框就会每次都创建。z-1:10000000 system.time(z3-8)user system elapsed 0.06 0.00 0.06 system.time(z33-88)user system elapsed 0 0 0 m-5000 n-1000 z-list()for(i in 1:m)zi-sample(1:10,n,replace=T) system.time(for(i in 1:m) zi3-8)user system elapsed 0.06 0.00 0.06 z-matrix(sample(1:10,m*n,replace=T),nrow=m) system.time(z,3-8)user system elapsed 0.03 0.00 0.03

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号