将二元向量转换为十进制

use*_*765 6 binary r decimal

我有一个二进制字符串的向量:

a<-c(0,0,0,1,0,1)
Run Code Online (Sandbox Code Playgroud)

我想将此向量转换为十进制.

我尝试使用compositions包和unbinary()函数,但是,此解决方案以及我在此站点上找到的大多数其他解决方案都需要g-adic字符串作为输入参数.

我的问题是如何将矢量而不是字符串转换为十进制?

说明问题:

library(compositions)
unbinary("000101") 
[1] 5
Run Code Online (Sandbox Code Playgroud)

这给出了正确的解决方案,但是:

unbinary(a)
unbinary("a")
unbinary(toString(a)) 
Run Code Online (Sandbox Code Playgroud)

产生NA.

MrF*_*ick 7

你可以尝试这个功能

bitsToInt<-function(x) {
    packBits(rev(c(rep(FALSE, 32-length(x)%%32), as.logical(x))), "integer")
}

a <- c(0,0,0,1,0,1)
bitsToInt(a)
# [1] 5
Run Code Online (Sandbox Code Playgroud)

这里我们跳过字符转换.这只使用base功能.

可能就是这样

 unbinary(paste(a, collapse=""))
Run Code Online (Sandbox Code Playgroud)

如果您仍然想要使用该功能,那会有用吗


Gri*_*sha 5

有一个单线解决方案:

Reduce(function(x,y) x*2+y, a)

说明:

扩展Reduce结果的应用程序,例如:

Reduce(function(x,y) x*2+y, c(0,1,0,1,0)) = (((0*2 + 1)*2 + 0)*2 + 1)*2 + 0 = 10

随着每个新位接下来,我们将到目前为止的累计值加倍,然后将下一位添加到它.

另请参阅Reduce()功能说明.