【发布时间】:2011-06-03 18:27:27
【问题描述】:
> 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 将矢量化并接近最佳速度。
【问题讨论】:
-
科斯克是对的。 sapply 只是为真正的矢量化创造了一种错觉或糟糕的替代品。如果可以,您应该尝试使用固有的矢量化函数构建所有转换。
-
sapply的主要目的是使循环更易于阅读(并节省输入),而不是加快速度。
标签: r performance runtime