如何递归/重复地将二进制函数(按位异或)应用于R中的向量?

时间:2016-04-21 04:01:08

标签: r binary

我有一个数字向量,我们称之为v,我想评估将所有值一起异或的结果,即我想找v[1] XOR v[2] XOR v[3] ...

我有来自包bitXor的二进制按位XOR函数bitops。是否有一些我可以使用的代码,它像* apply函数一样,并且在不使用显式循环的情况下一次完成整个XOR操作?我对既适用于任何合适的二进制函数的解决方案感到满意,也不满意我错过了超过二进制XOR的实现。

1 个答案:

答案 0 :(得分:2)

首先,从这里窃取二进制转换函数 - Convert binary string to binary or decimal value

BinToDec <- function(x) {
    sum(2^(which(rev(unlist(strsplit(as.character(x), "")) == 1))-1))
}

所以,你可以这样做:

vals <- c("101", "110", "11")
Reduce(bitXor, vapply(vals, BinToDec, FUN.VALUE=numeric(1)) )
#[1] 0

或者要查看每个步骤,您可以执行以下操作:

Reduce(bitXor, vapply(vals, BinToDec, FUN.VALUE=numeric(1)), accumulate=TRUE)
#[1] 5 3 0

相当于:

c(bitXor(5,0), bitXor(5,6), bitXor(bitXor(5,6),3))
#[1] 5 3 0