【问题标题】:Is `<-` actually slower than `=`?`<-` 实际上比 `=` 慢吗?
【发布时间】:2016-12-06 20:32:04
【问题描述】:

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

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 = NULLx &lt;- NULL 快。

【问题讨论】:

标签: r performance microbenchmark


【解决方案1】:

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

你需要做这样的事情:

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

或者正如@Roland 在 cmets 中描述的那样。 这会调用赋值运算符后面的相应函数。

【讨论】:

  • microbenchmark(test1 = {x = NULL}, test2 = {x &lt;- NULL}, times = 100e3)
【解决方案2】:

这些语句在这种情况下不会做同样的事情。例如,如果您运行,您将看到这一点

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

这创建了一个对象x,但没有创建对象y。您可以使用括号运行您要运行的测试:

microbenchmark({y = NULL}, {x <- NULL}, times = 100e3)

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2019-07-23
    • 2021-06-11
    • 2021-12-17
    • 2017-11-06
    相关资源
    最近更新 更多