sapply与复合函数的速度比较

mch*_*ema 4 performance runtime r

> 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 
Run Code Online (Sandbox Code Playgroud)

在阅读了R提示问题的答案后,我正在尝试这个.在上述情况下,我没想到蓝色比等效复合函数慢几个数量级.有谁知道为什么会这样?如果我理解正确,那么矢量化并接近最佳速度.

koh*_*ske 5

可能是sapply,这是一个简单的lapply包装器,没有矢量化.试试这段代码:

system.time(sapply(rnorm(10), function (x) {print(length(x)); round(x,2)}))
Run Code Online (Sandbox Code Playgroud)

并在此处查看实现:https://svn.r-project.org/R/trunk/src/main/apply.c