r - 如何改进这个哈希函数

标签 r hash

有没有办法提高这个散列的初始化速度? 目前,这在我的机器上大约需要 20 分钟。

#prepare hash()
hash <- list();

mappedV <- # matrix with more than 200,000 elements
for( i in 1:nrow(mappedV) ) {
  hash[[paste(mappedV[i,], collapse = '.')]] <- 0;
}

在这段代码之前,我使用了一个矩阵,但这花了我3个多小时。所以我不会提示这 20 分钟。我只是好奇是否有更好的选择。我使用哈希函数对 200,000 种可能组合中的每一种进行计数。

PS:并发可能是一种选择。但这并没有改进散列。

最佳答案

通过预先分配所需长度的列表而不是在每次迭代时增加列表,您通常会节省大量时间。

看:

X <- vector(mode="list", 1e5)
Y <- list()

system.time(for(i in 1:1e5) X[[i]] <- 0)
#    user  system elapsed 
#     0.3     0.0     0.3 
system.time(for(i in 1:1e5) Y[[i]] <- 0)
#    user  system elapsed 
#   48.84    0.05   49.34 
identical(X,Y)
# [1] TRUE

因为整个列表 Y 每次被添加时都会被复制,添加额外的元素只会随着大小的增长而变得越来越慢。

关于r - 如何改进这个哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914965/

相关文章:

r - 在 R 中缩放 Flexdashboard 仪表

python - 对 Python 中方法的内容进行哈希处理

ruby - 将散列传递给接受关键字参数的函数

java - 绝对值java

arrays - 将字符串添加到嵌套在哈希内部的数组中

json - 在 R 中使用 fromJSON 时处理 NaN

r - 在 Ubuntu 16.04 上将 R 版本从 3.4.4 升级到 3.5.3

r - left_join 表示列不存在,即使它存在

r - 使用 R 提取每个回归系数的 p 值列表(1104 个线性回归)

电子邮件重复数据删除