我对R中字符串比较的速度感到好奇,当时正确使用!=
vs ==
,并且想知道他们做了多少快捷方式。
如果我有一个有两个级别的向量,一个频繁出现,另一个很少,(试图增加我想要的效果)。
x <- sample(c('ALICE', 'HAL90000000000'), replace = TRUE, 1000, prob = c(0.05,0.95))
我会假设(如果有快捷方式)操作
x != 'ALICE'
会比以下快得多:
x == 'HAL90000000000'
因为要在后一种情况下检查相等性,我会假设我需要检查每个字符,而前者将被第一个或最后一个字符无效(取决于算法检查哪一方)
但是当我进行基准测试时,它似乎并非如此(在重复试验中它是不确定的,尽管对==
操作的偏差很小?),或者这不是公平审判:
> microbenchmark(x != 'ALICE', x == 'HAL90000000000')
Unit: microseconds
expr min lq mean median uq max neval
x != "ALICE" 4.520 4.5505 4.61831 4.5775 4.6525 4.970 100
x == "HAL90000000000" 3.766 3.8015 4.00386 3.8425 3.9200 13.766 100
这是为什么?
编辑:
我假设它是因为它正在进行完整的字符串匹配,但如果是这样,有没有办法让R优化这些?对于匹配长字符串或短字符串所花费的时间的混淆,我没有任何收获,不用担心密码。