有没有一种方法可以在R中创建一个“字典”,这样它就有对了?
x=dictionary(c("Hi","Why","water") , c(1,5,4))
x["Why"]=5
我问这个问题是因为我实际上在寻找一个两类变量的函数。
使得如果x=字典(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检索结果。获取结果[“B”,“a”] = 9
什么是做到这一点的最佳有效方法?
6条答案
按热度按时间lymnna711#
我知道三个字典的R包:
hash
、hashmap
和dict
。***2018年7月更新:***新版本,
container
。***2018年9月更新:***新版本,collections
哈希
键必须是字符串。值可以是任何R对象。
要获取密钥:
要获取值:
print
示例:values
函数接受sapply
的参数:散列表
参见https://cran.r-project.org/web/packages/hashmap/README.html。
hashmap
* 不 * 提供存储任意类型对象的灵活性。键和值被限制为"标量"对象(长度为一个字符、数字等)。值必须是相同的类型。
漂亮的
print
示例:错误:
命令
目前仅在Github上提供:https://github.com/mkuhn/dict
访问不存在的键会引发错误:
但是有一个很好的特性可以解决这个问题:
获取密钥:
获取值:
获取项目:
没有
print
示例。这个包还提供了
numvecdict
函数来处理一个字典,其中数字和字符串(包括每一个的向量)可以用作键,并且只能存储数字的向量。f4t66c6m2#
您只需使用键值对创建一个向量。
更新:要回答问题的第二部分,您可以创建一个 Dataframe 并按如下方式计算值:
输出:
vnjpjtjt3#
您可以只使用
data.frame
和row.names
来完成此操作:ngynwnxp4#
由于向量、矩阵、列表等在R中表现为“字典”,你可以做如下的事情:
如果你想要一个你在例子中展示的表格,只要重新调整你的数组...
fhg3lkii5#
请看我对最近一个问题的回答。本质上,您使用环境来实现这种类型的功能。
对于更高维的情况,如果你想用简单的语法来检索结果(你可以命名行和列),你最好使用
array
(二维的),作为一种选择,你可以用一个不出现在其中的分隔符将两个键paste
放在一起,然后将其作为一个唯一的标识符。具体来说,是这样的:
ggazkfy86#
使用
tidyverse
使用更新的
tidyverse
方法添加答案。可能有更干净的方法来处理
crossing
(它创建所有组合)和unnest
ing,但这是一种快速而肮脏的方法。由reprex package(v2.0.1)于2022年4月6日创建
tibble
版本3.1.6dplyr
版本1.0.8tidyr
版本1.2.0stringr
版本1.4.0