问题描述
> 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 提示问题的答案后尝试了这一点.我没想到 sapply 比上述情况下的等效复合函数慢几个数量级.有谁知道为什么会这样?如果我理解正确 sapply 将矢量化并接近最佳速度.
I was trying this out after reading the answers to the R tips question. I did not expect sapply to be order of magnitude slower than the equivalent composite function in the above case. Does anyone know why this is the case? If i understand correctly sapply will vectorize and be near optimally fast.
推荐答案
这里没有什么可应用的 - 你只给它一个向量 - 不是向量列表,并且 sapply 将结果转换为(单列)矩阵.
There's nothing here to sapply to - you only give it a single vector - not a list of vectors, and sapply converts the result to a (single column) matrix.
sapply 正在为您简化结果,但这样做必须生成一个数组.
sapply is simplifying the result for you, but in doing so has to generate an array.
比较一下,如果给它一个列表:
Compare if you give it a list:
system.time(sapply(list(rnorm(1000000,0,1)), function (x) round(x,2)))
user system elapsed
0.22 0.00 0.22
system.time(sapply(rnorm(1000000,0,1), function (x) round(x,2)))
user system elapsed
4.21 0.00 4.21
这篇关于sapply 与复合函数的速度比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!