如何在R环境中完成散列? (用于优化查找性能)

时间:2017-06-11 20:37:08

标签: r hash hashtable

在列表中使用按名称查找时,可以先将列表转换为具有散列的环境。例如:

x <- 1:1e5
names(x) <- x
lx <- as.list(x)
elx <- list2env(lx, hash = TRUE) # takes some time

library(microbenchmark)
microbenchmark(x[[which(x==1000)]], x[["1000"]], lx[["1000"]], get("1000", envir = elx), elx[["1000"]])

具有以下性能提升:

> microbenchmark(x[[which(x==1000)]], x[["1000"]], lx[["1000"]], get("1000", envir = elx), elx[["1000"]])
Unit: nanoseconds
                     expr    min       lq       mean   median       uq     max neval cld
    x[[which(x == 1000)]] 547213 681609.5 1063382.25 720718.5 788538.5 5999776   100   b
              x[["1000"]]   6518   6829.0    7961.83   7139.0   8070.0   22659   100  a 
             lx[["1000"]]   6518   6829.0    8284.63   7140.0   8070.5   33212   100  a 
 get("1000", envir = elx)    621    931.0    2477.22   1242.0   2794.0   20175   100  a 
            elx[["1000"]]      0      1.0    1288.47    311.0   1552.0   22659   100  a 

查看list2env的帮助页面时:

  

(对于envir = NULL的情况):逻辑指示是否创建   环境应该使用散列,请参阅new.env。

在查看new.env的帮助时,它并没有解释如何创建哈希表,但它确实说:

  

有关散列与否的性能影响,请参阅   https://en.wikipedia.org/wiki/Hash_table

很明显哈希已经完成,并且效果很好(至少对于我给出的例子),但是从维基百科页面看,很明显有各种方法可以创建哈希表。因此,我的问题是:如何在list2env中创建哈希表?

0 个答案:

没有答案