R 列表作为哈希的键

标签 r vector hashmap

我正在使用 hash库并想使用向量作为键,但是,它想分配给向量中的每个值,但我想使用向量本身作为键。如何设置和访问散列元素以实现此目的?我想做这样的事情:

library(hash)
h <- hash()

inc <- function(key) {
  if(has.key(c(key), h)) {
    h[[key]] = h[[key]] + 1
  } else {
    h[[key]] = 1
  }
}

inc(c('a', 'b'))

并有 key c('a', 'b')和值(value) 1在哈希中。每当我传递相同的向量时,该值就会增加一。

我知道这是 R 中的正常行为,因为它是一种数组编程语言,但我想在这种情况下避免它。

最佳答案

这是一个想法:您可以使用 deparse() 生成输入参数的明确字符串表示,这将是有效的哈希键。从理论上讲,这适用于任何 R 对象,而不仅仅是原子向量。

library(hash);
h <- hash();

hinc <- function(key.obj) { key.str <- deparse(key.obj); h[[key.str]] <- if (has.key(key.str,h)) h[[key.str]]+1 else 1; };
hget <- function(key.obj) { key.str <- deparse(key.obj); h[[key.str]]; };

x1 <- c('a','b');
x2 <- 'ab';
hinc(x1);
hinc(x1);
hinc(x2);

hget(x1);
## [1] 2
hget(x2);
## [1] 1

关于R 列表作为哈希的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745461/

相关文章:

r - 如何转换通用数据框?

c++ - 当我使用 vector::erase 时它崩溃的原因可能是什么?

c++ std vector 用现有对象初始化

java - 使用索引从 Map 中检索值

java - 有效地找到匹配的对象对

r - ifelse与data.table

r - 为什么 geom_密度 绘制的数据与预期图像不同?

python - 绘制时间序列数据,其中每小时变化是不同列中的值

c++ - 在自包含 vector 循环中删除时为 "Vector Iterators incompatible"

java - 具有复合键和分层默认值的集合