我有一个字符串向量,我想将每个元素分别散列为模数为n的整数。
在this SO post中,它建议使用digest
和strotoi
的方法。但是当我尝试它时,我得到NA
作为返回值
library(digest)
strtoi(digest("cc", algo = "xxhash32"), 16L)
所以上面的方法不会起作用,因为它甚至不能产生一个整数,更不用说模数的一个。
对于某些n,将大型字符串向量散列为模n的最佳方法是什么?由于矢量很大,因此非常欢迎有效的解决方案。
答案 0 :(得分:2)
R对整数向量使用32位整数,因此可表示整数的范围限制为大约+/- 2 * 10 ^ 9。 strtoi
会返回NA
因为数字太大了。
mpfr
包中的Rmpfr
- 函数应该适合您:
mpfr(x = digest("cc`enter code here`", algo = "xxhash32"), base = 16)
[1] 4192999065
答案 1 :(得分:1)
我使用此Rcpp implementation中的代码创建了一个SO post,即使对于大型字符串向量,结果代码也非常快。
使用它
if(!require(disk.frame)) devtools::install_github("xiaodaigh/disk.frame")
modn = 17
disk.frame::hashstr2i(c("string1","string2"), modn)