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

如何递归/重复地将二进制函数(按位异或)应用于R中的向量?,r,binary,R,Binary,我有一个数字向量,我们称之为v,我想计算将所有值XORing在一起的结果,也就是说,我想找到v[1]XOR v[2]XOR v[3] 我从包bitops中获得了二进制按位异或函数bitXor。我是否可以使用一段简洁的代码,它的作用类似于*apply函数,并且在不使用显式循环的情况下一次性完成XORing?我很高兴能找到一个适用于任何合适的二进制函数的解决方案,或者如果我错过了一个以上的二进制异或实现。首先,从这里窃取二进制转换函数- 这相当于: c(bitXor(5,0), bitXor(5,6

我有一个数字向量,我们称之为v,我想计算将所有值XORing在一起的结果,也就是说,我想找到
v[1]XOR v[2]XOR v[3]


我从包
bitops
中获得了二进制按位异或函数
bitXor
。我是否可以使用一段简洁的代码,它的作用类似于*apply函数,并且在不使用显式循环的情况下一次性完成XORing?我很高兴能找到一个适用于任何合适的二进制函数的解决方案,或者如果我错过了一个以上的二进制异或实现。

首先,从这里窃取二进制转换函数-

这相当于:

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

首先,从这里窃取二进制转换函数-

这相当于:

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

这只是相邻值之间的异或吗?或者在向量中的任何值的组合之间?跨越向量中的所有值。换句话说,我想输入向量,并返回一个值,该值是对元素进行异或运算的结果。比如如果v=c(101b,110b,11b),那么我想要101 XOR 110 XOR 011=000=0。那么
c(101b,110b,11b)
是一个有效的向量吗?您是否只想
Reduce(bitXor,c(101,110,11))
?对不起,误读了!需要格式化…但是,在任何情况下,@thelatemail关于
Reduce
都是正确的,它会将一个带有两个参数的a命令连续应用于一个向量。尝试
Reduce(bitXor,c(5,6,3))
(使用示例的十进制版本)此异或是否仅在相邻值之间?或者在向量中的任何值的组合之间?跨越向量中的所有值。换句话说,我想输入向量,并返回一个值,该值是对元素进行异或运算的结果。比如如果v=c(101b,110b,11b),那么我想要101 XOR 110 XOR 011=000=0。那么
c(101b,110b,11b)
是一个有效的向量吗?您是否只想
Reduce(bitXor,c(101,110,11))
?对不起,误读了!需要格式化…但是,在任何情况下,@thelatemail关于
Reduce
都是正确的,它会将一个带有两个参数的a命令连续应用于一个向量。尝试
Reduce(bitXor,c(5,6,3))
(使用示例的十进制版本)转换为字符串位并不是真的必要,因为我实际上是在用直数工作(我只是在注释中使用二进制值来更清楚地说明发生了什么,尽管看起来失败了)。不过,Reduce函数正是我想要的,所以谢谢!转换为字符串位并不是真的必要,因为我实际上是在用正数工作(我只是在注释中使用了二进制值,以便更清楚地说明发生了什么,尽管看起来失败了)。不过,Reduce函数正是我想要的,所以谢谢!
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