R:将字符串快速散列为整数模n?

时间:2017-11-28 23:36:11

标签: r hash

我有一个字符串向量,我想将每个元素分别散列为模数为n的整数。

this SO post中,它建议使用digeststrotoi的方法。但是当我尝试它时,我得到NA作为返回值

library(digest)
strtoi(digest("cc", algo = "xxhash32"), 16L)

所以上面的方法不会起作用,因为它甚至不能产生一个整数,更不用说模数的一个。

对于某些n,将大型字符串向量散列为模n的最佳方法是什么?由于矢量很大,因此非常欢迎有效的解决方案。

2 个答案:

答案 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)