> system.time(sapply(rnorm(1000000,0,1), function (x) round(x,2)))
user system elapsed
2.78 0.11 2.89
> system.time(round(rnorm(1000000,0,1),2))
user system elapsed
0.29 0.00 0.30
在阅读了 R Tips 问题的答案后,我尝试了这个。我没想到 sapply 会比上述情况下的等效复合函数慢几个数量级。有谁知道为什么会这样?如果我理解正确,sapply 将会矢量化并且接近最佳速度。
sapply 可能是 lapply 的简单包装,没有矢量化。试试这个代码:
system.time(sapply(rnorm(10), function (x) {print(length(x)); round(x,2)}))
并查看此处的实现:https://svn.r-project.org/R/trunk/src/main/apply.c https://svn.r-project.org/R/trunk/src/main/apply.c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)