`< -`实际上比`=`慢吗?

时间:2016-12-06 12:13:09

标签: r performance microbenchmark

以下执行时间的差异是真的吗?

library(microbenchmark)
microbenchmark(x = NULL, x <- NULL, times = 100e3)

Unit: nanoseconds
      expr min lq    mean median uq  max neval
         x   0  0 0.60819      0  0 8426 1e+05
 x <- NULL   0  0 1.75101      0  1 8727 1e+05

我得到一个警告,大约75%的评估都有非正执行时间。尽管如此,每次运行此操作时,我都会得到一致的结果:x = NULL平均比x <- NULL快。

2 个答案:

答案 0 :(得分:4)

microbenchmark函数以不同的方式解析...个参数。 x=NULL永远不会被解释为一个分配,而是一个函数参数。 所以,就我所知,你并没有真正衡量第一个论点的时间。

你需要做这样的事情:

 microbenchmark(test1 = `=`(x, NULL), test2 = `<-`(x, NULL), times = 100e3)

或@Roland在评论中描述。 这会调用赋值运算符后面的相应函数。

答案 1 :(得分:3)

这些陈述在这种情况下不会做同样的事情。如果你运行的话,你会看到这个

x

这创建了一个对象y,但没有对象microbenchmark({y = NULL}, {x <- NULL}, times = 100e3) 。您可以运行使用括号运行的测试:

colA