R中有换档操作吗?

时间:2016-06-10 14:24:17

标签: r

在c ++中有移位操作

 >> right shift
 << left shift

这被认为是非常快的 我试图在R中应用相同的但似乎是错的。

R中是否有与此类似的快速操作?

提前谢谢。

1 个答案:

答案 0 :(得分:5)

您可以使用bitwShiftLbitwShiftR

bitwShiftL(16, 2)
#[1] 64

bitwShiftR(16, 2)
#[1] 4

这是source code。根据这些函数中额外代码的数量以及*/是基元的事实来判断,这些不太可能比分割/乘以2的等效幂更快。在我的一个虚拟机上,

microbenchmark::microbenchmark(
    bitwShiftL(16, 2),
    16 * 4,
    times = 1000L
)
#Unit: nanoseconds
#              expr  min     lq     mean median   uq    max neval cld
# bitwShiftL(16, 2) 1167 1353.5 2336.779   1604 2067 117880  1000   b
#            16 * 4  210  251.0  564.528    347  470  51885  1000   a

microbenchmark::microbenchmark(
    bitwShiftR(16, 2),
    16 / 4,
    times = 1000L
)
# Unit: nanoseconds
#               expr  min     lq     mean median     uq   max neval cld
#  bitwShiftR(16, 2) 1161 1238.5 1635.131 1388.5 1688.5 39225  1000   b
#               16/4  210  240.0  323.787  280.0  334.0 14284  1000   a

我还应该指出,尝试微观优化解释性语言可能是浪费时间。如果性能是一个很大的问题,你愿意在几个时钟周期内分裂,那么首先用C或C ++编写你的程序。