`<-` 实际上比 `=` 慢吗?
Is `<-` actually slower than `=`?
下面的执行时间差异是真的吗?
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
快。
这些语句在此上下文中的作用不同。如果你 运行 例如
你会看到这个
microbenchmark(y = NULL, x <- NULL, times = 100e3)
这创建了一个对象 x
,但没有对象 y
。您可以 运行 使用方括号 运行 进行的测试:
microbenchmark({y = NULL}, {x <- NULL}, times = 100e3)
microbenchmark
函数以不同的方式解析 ...
参数。 x=NULL
永远不会被解释为一个赋值,而是一个函数参数。
因此,据我所知,您并没有真正测量第一个参数的时间。
你需要做这样的事情:
microbenchmark(test1 = `=`(x, NULL), test2 = `<-`(x, NULL), times = 100e3)
或如@Roland 在评论中所述。
这会调用赋值运算符后面的适当函数。
下面的执行时间差异是真的吗?
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
快。
这些语句在此上下文中的作用不同。如果你 运行 例如
你会看到这个microbenchmark(y = NULL, x <- NULL, times = 100e3)
这创建了一个对象 x
,但没有对象 y
。您可以 运行 使用方括号 运行 进行的测试:
microbenchmark({y = NULL}, {x <- NULL}, times = 100e3)
microbenchmark
函数以不同的方式解析 ...
参数。 x=NULL
永远不会被解释为一个赋值,而是一个函数参数。
因此,据我所知,您并没有真正测量第一个参数的时间。
你需要做这样的事情:
microbenchmark(test1 = `=`(x, NULL), test2 = `<-`(x, NULL), times = 100e3)
或如@Roland 在评论中所述。 这会调用赋值运算符后面的适当函数。