在列表中使用按名称查找时,可以先将列表转换为具有散列的环境。例如:
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
中创建哈希表?