我有一个数字向量,我们称之为v,我想评估将所有值一起异或的结果,即我想找v[1] XOR v[2] XOR v[3]
...
我有来自包bitXor
的二进制按位XOR函数bitops
。是否有一些我可以使用的代码,它像* apply函数一样,并且在不使用显式循环的情况下一次完成整个XOR操作?我对既适用于任何合适的二进制函数的解决方案感到满意,也不满意我错过了超过二进制XOR的实现。
答案 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