R中有字典功能吗
有没有办法在 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
最好、最有效的方法是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我知道字典的三个 R 包:
hash
、hashmap
和dict
。2018 年 7 月更新:一个新的,
容器
。2018 年 9 月更新:一个新的,集合
hash
Key 必须是字符串。值可以是任何 R 对象。
获取键:
获取值:
print
实例:values
函数接受sapply
的参数:hashmap
参见 https://cran.r-project.org/web/packages/hashmap/README.html。
hashmap
确实不提供存储任意类型对象的灵活性。键和值仅限于“标量”对象(长度为一个字符、数字等)。这些值必须属于同一类型。
美丽的
print
实例:错误:
dict
目前仅在 Github 上可用:https://github.com /mkuhn/dict
优点:任意键和值,而且速度快。
访问不存在的键会引发错误:
但是有一个很好的功能可以处理这个问题:
获取键:
获取值:
获取项目:
没有
print
实例。该包还提供了函数 numvecdict 来处理字典,其中数字和字符串(包括每个字符串的向量)可以用作键,并且只能存储数字向量。
I know three R packages for dictionaries:
hash
,hashmap
, anddict
.Update July 2018: a new one,
container
.Update September 2018: a new one, collections
hash
Keys must be character strings. A value can be any R object.
To get keys:
To get values:
The
print
instance:The
values
function accepts the arguments ofsapply
:hashmap
See https://cran.r-project.org/web/packages/hashmap/README.html.
hashmap
does not offer the flexibility to store arbitrary types of objects.Keys and values are restricted to "scalar" objects (length-one character, numeric, etc.). The values must be of the same type.
Beautiful
print
instance:Errors:
dict
Currently available only on Github: https://github.com/mkuhn/dict
Strengths: arbitrary keys and values, and fast.
Accessing to a non-existing key throws an error:
But there is a nice feature to deal with that:
Get keys:
Get values:
Get items:
No
print
instance.The package also provides the function
numvecdict
to deal with a dictionary in which numbers and strings (including vectors of each) can be used as keys, and that can only store vectors of numbers.您只需使用键值对创建一个向量即可。
更新:要回答问题的第二部分,您可以创建一个数据框并计算如下值:
输出:
You simply create a vector with your key value pairs.
Update: To answer the 2nd portion of the question, you can create a dataframe and compute the values like this:
Output:
您可以仅使用
data.frame
和row.names
来执行此操作:You can use just
data.frame
androw.names
to do this:在向量、矩阵、列表等在 R 中充当“字典”的情况下,您可以执行如下操作:
如果您想要一个如示例中所示的表格,只需重新调整数组的形状...
In that vectors, matrices, lists, etc. behave as "dictionaries" in R, you can do something like the following:
If you wanted a table as you've shown in your example, just reshape your array...
请参阅我的答案最近的一个问题。本质上,您使用环境来实现此类功能。
对于高维情况,如果您想要使用简单的语法来检索结果(您可以命名行和列),则最好使用
数组
(二维)。作为替代方案,您可以将两个键与它们中不存在的分隔符粘贴
在一起,然后将其用作唯一标识符。具体来说,是这样的:
See my answer to a very recent question. In essence, you use environments for this type of functionality.
For the higher dimensional case, you may be better off using an
array
(twodimensional) if you want the easy syntax for retrieving the result (you can name the rows and columns). As an alternative,you canpaste
together the two keys with a separator that doesn't occur in them, and then use that as a unique identifier.To be specific, something like this:
使用
tidyverse
使用更新的
tidyverse
方法添加答案。可能有更干净的方法来处理交叉(创建所有组合)和取消嵌套,但这是一种快速而肮脏的方法。
由 reprex 包 (v2.0.1) 于 2022 年 4 月 6 日创建
<代码>tibble 版本 3.1.6
dplyr
版本 1.0.8tidyr
版本 1.2.0stringr
版本 1.4.0Using
tidyverse
Adding an answer using more recent
tidyverse
approaches.There are probably cleaner ways of handling the
crossing
(which creates all combinations) andunnest
ing, but this is a quick and dirty approach.Created on 2022-04-06 by the reprex package (v2.0.1)
tibble
version 3.1.6dplyr
version 1.0.8tidyr
version 1.2.0stringr
version 1.4.0