R 列表作为散列的键
R list as key for hash
我正在使用 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 中的正常行为,因为它是一种数组编程语言,但我想在这种情况下避免它。
这里有一个想法:您可以使用 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 package called dict
让您可以使用向量作为键:
library(dict)
d <- dict()
d[[ c("a", "b") ]] <- 1
d[[ c("a", "b") ]]
这应该比之前建议的解析对象更有效。
我正在使用 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 中的正常行为,因为它是一种数组编程语言,但我想在这种情况下避免它。
这里有一个想法:您可以使用 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 package called dict
让您可以使用向量作为键:
library(dict)
d <- dict()
d[[ c("a", "b") ]] <- 1
d[[ c("a", "b") ]]
这应该比之前建议的解析对象更有效。