月珥 正在准备开始优化代码,第一步当然是先定位速度瓶颈啦。得知他有一个profr包,大喜过望,心想Hadley大神出品,必属精品,赶紧装上玩玩。结果一看,什么嘛,根本就是一个半成品,连summary方法都没有,也就是能画画图而已,划出来的图还根本看不懂……有点小失望,原来Hadley这个金字招牌也不是百分之百管用诶= = 还是proftools包好,超好玩!不过依赖的两个包现在已经转移到bioconductor上去了……
yihui 那个图还是要花几分钟时间琢磨一下才看得懂的,横轴是时间长度,纵轴是函数调用的深度。一般人初看一眼会以为纵轴是时间长度。你需要看的关键点是横向上哪个矩形相对最长,注意是相对最长而不是绝对最长,因为绝对最长的必须是最底部的函数,要看一个函数内部哪些函数比较花时间,去优化那些函数。 真正要玩代码优化,还是 profvis 更有用一些:https://github.com/rstudio/profvis 下一个 RStudio 版本会直接集成 profvis,到时候哪一行代码花了多长时间都可以交互式查看。 最后,当然不是每个人的每个作品都能做到完美,但感觉 profr 比 R 自身的 Rprof() 以及 summaryRprof() 还是强一点的,它最大的亮点在把 Rprof() 的结果以一个数据框的形式组织出来,体现了函数调用的层级关系。
月珥 [未知用户] 试了一下profvis,当结果页面在我的浏览器里跳出来的时候真的惊呆了!果然好用,谢谢推荐!≧ v ≦ 用了profvis之后我第一次发现光是简单地把一些常用的泛型函数改成实际承担运算的函数,比如把solve改成solve.default,把det改成determinant.matrix,就可以省出好些浪费在类匹配上的时间来,实在是大收获……
yihui 是的,这就跟数学证明一样,你的假设越多,越容易证明。你知道的先验信息越多,代码就越容易优化。如果你确定一定以及肯定某个函数的参数是某个特定的类型,那当然没必要费劲去匹配类型。强类型语言容易优化,弱类型语言不容易优化,就是因为要不停猜猜猜试试试。
edwardcooper khl0798 https://phdstatsphys.wordpress.com/2017/09/18/doing-statistics-in-parallel-with-r/