您可以尝试以下方法:
binStr <- "00000001001100110000010110110111" # 20121015
(binNum <- 00000001001100110000010110110111) # 20121015
[1] 1.0011e+24
binVec <- c(1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1) # 2670721
shortBin <- 10011010010 # 1234
BinToDec <- function(x)
sum(2^(which(rev(unlist(strsplit(as.character(x), "")) == 1))-1))
BinToDec(binStr)
[1] 20121015
BinToDec(binNum)
[1] 576528
BinToDec(binVec)
[1] 2670721
BinToDec(shortBin)
[1] 1234
也就是说,您可以同时输入字符串(因为as.character())和数字二进制值,但是像binNum 这样的大数字存在一些问题。据我了解,您还想将二进制字符串转换为数字二进制值,但不幸的是,至少在基本 R 中没有这种数据类型。
编辑:现在BinToDec 也接受二进制向量,这可能是大数字的解决方案。来自包sfsmisc 的函数digitsBase() 返回这样一个向量:
(vec <- digitsBase(5, base= 2, 10))
Class 'basedInt'(base = 2) [1:1]
[,1]
[1,] 0
[2,] 0
[3,] 0
[4,] 0
[5,] 0
[6,] 0
[7,] 0
[8,] 1
[9,] 0
[10,] 1
BinToDec(vec)
[1] 5
最后,另一种可能是包compositions,例如:
(x <- unbinary("10101010"))
[1] 170
(y <- binary(x))
[1] "10101010"