【问题标题】:data.table and hash -- speed and flexibility to handle multiple values per keydata.table 和 hash——每个键处理多个值的速度和灵活性
【发布时间】:2015-12-20 15:58:19
【问题描述】:

我有两个问题:

  1. 对于大数据,hash 是否比 data.table 快​​?
  2. 如果我想使用基于哈希的方法,如何处理每个键的多个值?

我查看了相关软件包的小插图并在 Google 上搜索了一些可能的解决方案,但我仍然不确定上述问题的答案。

考虑到以下帖子,

R fast single item lookup from list vs data.table vs hash

似乎在data.table 对象中的单个查找实际上非常慢,甚至比在 Base R 中的列表中还要慢?

但是,基于此基准,使用来自 hash 的哈希对象进行查找非常快速——准确吗?

但是,对象哈希似乎只处理唯一键?

在下面只创建了 2 个 (key,value) 对。

library(hash)
> h <- hash(c("A","B","A"),c(1,2,3))
> h
<hash> containing 2 key-value pair(s).
  A : 3
  B : 2

所以,如果我有一个包含 (key,values) 的表,其中一个键可以具有不同的值,并且我想对与该键对应的值进行(快速)查找,那么最好的对象/数据结构是什么在 R 中做到这一点?

我们还能使用hash 对象还是data.table 在这种情况下最合适?

假设我们正在处理一个非常大的表的问题,否则这个讨论是无关紧要的。

相关链接: http://www.r-bloggers.com/hash-table-performance-in-r-part-i/

【问题讨论】:

    标签: r hash data.table


    【解决方案1】:

    您指的是您所指的 SO 帖子中的问题,而不是答案。

    正如您将在那里的答案中看到的那样,您从基准测试中获得的结果可能会发生很大变化,具体取决于您如何使用 data.table 或任何给定的大数据包。

    您是正确的,对于hash() 的最简单实现,每个键都有 1 个值。当然,有一些解决方法。一种是有一个字符串值,并在字符串后面附加多个值:

    h <- hash(c("Key 1","Key 2","Key 3"),c("1","2","1 and 2"))
    h
    <hash> containing 3 key-value pair(s).
      Key 1 : 1
      Key 2 : 2
      Key 3 : 1 and 2
    

    另一个映射是通过 R 中的散列环境使用hash table,或者可能通过hashmap()

    我不知道是否有一个明确的证据证明hashdata.table 总是会更快。它总是会因您的用例、数据以及您在代码中实现它们的方式而异。

    一般来说,如果您的用例不涉及真正的键值对,我会说data.table 可能是一个更常见的解决方案,并且不需要变通方法来解决每个钥匙。

    【讨论】:

    • @FaguiCurtain 没问题! :)
    猜你喜欢
    • 2020-03-20
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2020-04-04
    相关资源
    最近更新 更多