R列表作为哈希表的键

6

我正在使用 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'))

在哈希表中,键为c('a', 'b'),值为1。每当我传递相同的向量时,该值就会增加一次。

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

2个回答

1
这里有个想法:你可以使用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

0

我创建了一个名为dict的R包, 它允许您使用向量作为键:

library(dict)
d <- dict()
d[[ c("a", "b") ]] <- 1
d[[ c("a", "b") ]]

这应该比之前建议的解析对象更有效率。


谢谢,看起来非常有用!那是我在Python中真正喜欢的一个功能。 - thc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接