如何检查a是否是2的幂

cod*_*ing 1 validation r filter dataframe data-science

我想知道是否有一种有效的方法可以知道我的数据框中列的哪些值是 2 的幂。我的数据是一个有 6 列的数据框,其中一列的值是我想要检查的数字是否为 2 的幂。

class(df$doubling_times) > numeric

Gre*_*gor 7

log2(x) %% 1 == 0 - 检查数字的对数基数 2 是否为整数(除以 1 时,余数是否为 0?)

> x = 1:10
> data.frame(x, power2 = log2(x) %% 1 == 0)
    x power2
1   1   TRUE
2   2   TRUE
3   3  FALSE
4   4   TRUE
5   5  FALSE
6   6  FALSE
7   7  FALSE
8   8   TRUE
9   9  FALSE
10 10  FALSE
Run Code Online (Sandbox Code Playgroud)

以上应该可行,但更安全的方法将允许浮点精度问题,并且可能是这样的:

remainder = log2(x) %% 1
tol = 1e-12 # tolerance
power2 = abs(remainder - round(remainder)) < tol
Run Code Online (Sandbox Code Playgroud)