如何在R中通过strtoi实现SQL式十六进制区域标志的重叠计算?
在R中实现SQL式的区域标志重叠计算
问题出在你误用了R的&运算符——这是逻辑与,和SQL里的按位与完全不是一回事。当两个转换后的整数都不为0时,逻辑与就会返回TRUE,完全不反映实际的位运算结果。
要实现和SQL一致的重叠判断,你需要用R内置的bitwAnd()函数执行按位与运算,再通过结果判断重叠情况:
示例1:验证区域完全包含
library(R.utils) area1 <- strtoi("090A", 16L) area2 <- strtoi("3BFF", 16L) overlap <- bitwAnd(area1, area2) # 若按位与结果等于area1,说明area1完全包含于area2 overlap == area1 # 返回TRUE,和SQL结果一致
示例2:验证无重叠
area3 <- strtoi("0400", 16L) area4 <- strtoi("2025", 16L) overlap <- bitwAnd(area3, area4) # 若按位与结果为0,说明两个区域无重叠 overlap == 0 # 返回TRUE,和SQL结果一致
补充:其实base R自带的strtoi()也支持十六进制转换,无需依赖R.utils,用法为strtoi("090A", base=16),效果完全相同。
内容的提问来源于stack exchange,提问作者chrisjacques
相关产品推荐
相关产品推荐

