gpt4 book ai didi

r - R中有字典功能吗

转载 作者:行者123 更新时间:2023-12-02 03:56:12 27 4
gpt4 key购买 nike

有没有办法在 R 中创建一个“字典”,使其具有对?一些效果:

x=dictionary(c("Hi","Why","water") , c(1,5,4))
x["Why"]=5

我问这个是因为我实际上正在寻找两个类别变量函数。

因此,如果 x=dictionary(c("a","b"),c(5,2))

     x  val
1 a 5
2 b 2

我想计算 x 键的所有组合上的 x1^2+x2

     x1 x2 val1  val2  x1^2+x2
1 a a 5 5 30
2 b a 2 5 9
3 a b 5 2 27
4 b b 2 2 6

然后我希望能够使用 x1 和 x2 检索结果。一些效果:get_result["b","a"] = 9

最好、最有效的方法是什么?

最佳答案

我知道三个用于字典的 R 包:hashhashmapdict

2018 年 7 月更新:一个新的,container .

2018 年 9 月更新:一个新的,collections

哈希

键必须是字符串。值可以是任何 R 对象。

library(hash)
## hash-2.2.6 provided by Decision Patterns
h <- hash()
# set values
h[["1"]] <- 42
h[["foo"]] <- "bar"
h[["4"]] <- list(a=1, b=2)
# get values
h[["1"]]
## [1] 42
h[["4"]]
## $a
## [1] 1
##
## $b
## [1] 2
h[c("1", "foo")]
## <hash> containing 2 key-value pair(s).
## 1 : 42
## foo : bar
h[["key not here"]]
## NULL

获取 key :

keys(h)
## [1] "1" "4" "foo"

获取值:

values(h)
## $`1`
## [1] 42
##
## $`4`
## $`4`$a
## [1] 1
##
## $`4`$b
## [1] 2
##
##
## $foo
## [1] "bar"

print 实例:

h
## <hash> containing 3 key-value pair(s).
## 1 : 42
## 4 : 1 2
## foo : bar

values 函数接受 sapply 的参数:

values(h, USE.NAMES=FALSE)
## [[1]]
## [1] 42
##
## [[2]]
## [[2]]$a
## [1] 1
##
## [[2]]$b
## [1] 2
##
##
## [[3]]
## [1] "bar"
values(h, keys="4")
## 4
## a 1
## b 2
values(h, keys="4", simplify=FALSE)
## $`4`
## $`4`$a
## [1] 1
##
## $`4`$b
## [1] 2

HashMap

参见https://cran.r-project.org/web/packages/hashmap/README.html

hashmap提供存储任意类型对象的灵 active 。

键和值仅限于“标量”对象(长度为一个字符、数字等)。这些值必须具有相同的类型。

library(hashmap)
H <- hashmap(c("a", "b"), rnorm(2))
H[["a"]]
## [1] 0.1549271
H[[c("a","b")]]
## [1] 0.1549271 -0.1222048
H[[1]] <- 9

漂亮的打印实例:

H
## ## (character) => (numeric)
## ## [1] => [+9.000000]
## ## [b] => [-0.122205]
## ## [a] => [+0.154927]

错误:

H[[2]] <- "Z"
## Error in x$`[[<-`(i, value): Not compatible with requested type: [type=character; target=double].
H[[2]] <- c(1,3)
## Warning in x$`[[<-`(i, value): length(keys) != length(values)!

字典

目前仅在 Github 上可用:https://github.com/mkuhn/dict

优势:任意键和值,而且速度快。

library(dict)
d <- dict()
d[[1]] <- 42
d[[c(2, 3)]] <- "Hello!" # c(2,3) is the key
d[["foo"]] <- "bar"
d[[4]] <- list(a=1, b=2)
d[[1]]
## [1] 42
d[[c(2, 3)]]
## [1] "Hello!"
d[[4]]
## $a
## [1] 1
##
## $b
## [1] 2

访问不存在的 key 会引发错误:

d[["not here"]]
## Error in d$get_or_stop(key): Key error: [1] "not here"

但是有一个很好的功能可以解决这个问题:

d$get("not here", "default value for missing key")
## [1] "default value for missing key"

获取 key :

d$keys()
## [[1]]
## [1] 4
##
## [[2]]
## [1] 1
##
## [[3]]
## [1] 2 3
##
## [[4]]
## [1] "foo"

获取值:

d$values()
## [[1]]
## [1] 42
##
## [[2]]
## [1] "Hello!"
##
## [[3]]
## [1] "bar"
##
## [[4]]
## [[4]]$a
## [1] 1
##
## [[4]]$b
## [1] 2

获取元素:

d$items()
## [[1]]
## [[1]]$key
## [1] 4
##
## [[1]]$value
## [[1]]$value$a
## [1] 1
##
## [[1]]$value$b
## [1] 2
##
##
##
## [[2]]
## [[2]]$key
## [1] 1
##
## [[2]]$value
## [1] 42
##
##
## [[3]]
## [[3]]$key
## [1] 2 3
##
## [[3]]$value
## [1] "Hello!"
##
##
## [[4]]
## [[4]]$key
## [1] "foo"
##
## [[4]]$value
## [1] "bar"

没有打印实例。

该包还提供了函数numvecdict来处理字典,其中数字和字符串(包括每个字符串的向量)可以用作键,并且只能存储数字向量。

关于r - R中有字典功能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com