使用字典/列表来获取键列表
我有一个小问题:我在 R 中找不到字典数据结构,所以我使用列表代替(如 "word"->number
)。
那么,如何获取密钥列表。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我有一个小问题:我在 R 中找不到字典数据结构,所以我使用列表代替(如 "word"->number
)。
那么,如何获取密钥列表。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
是的,
list
类型是一个很好的近似值。您可以在列表中使用names()
来设置和检索“密钥”:Yes, the
list
type is a good approximation. You can usenames()
on your list to set and retrieve the 'keys':如果您的“数字”值都具有相同的模式,您甚至不需要列表。如果我以 Dirk Eddelbuettel 为例:
仅当您的值是混合模式(例如字符和数字)或向量时才需要列表。
对于列表和向量,可以按名称对单个元素进行子集化:
或者对于列表:
You do not even need lists if your "number" values are all of the same mode. If I take Dirk Eddelbuettel's example:
Lists are only required if your values are either of mixed mode (for example characters and numbers) or vectors.
For both lists and vectors, an individual element can be subsetted by name:
Or for a list:
使用字典的首要原因是性能。尽管您可以使用命名向量和列表来完成任务,但问题是它们会变得非常慢并且随着数据的增加而占用内存。
然而许多人不知道的是,R 确实有一个内置的字典数据结构:带有选项
hash = TRUE
的环境请参阅以下示例以了解如何使其工作:
编辑:根据这个答案,我写了一篇博客文章,其中包含更多上下文:http://blog.ephorie.de/hash-me-if-you-can
The reason for using dictionaries in the first place is performance. Although it is correct that you can use named vectors and lists for the task the issue is that they are becoming quite slow and memory hungry with more data.
Yet what many people don't know is that R has indeed an inbuilt dictionary data structure: environments with the option
hash = TRUE
See the following example for how to make it work:
Edit: On the basis of this answer I wrote a blog post with some more context: http://blog.ephorie.de/hash-me-if-you-can
为了扩展 Calimo 的一点答案,我提出了一些在 R 中创建这个准字典时您可能会发现有用的东西:
a)如何返回字典的所有值:
b)检查字典是否包含键:
c)如何添加字典的新键、值对:
结果:
d) 如何满足真实字典的要求 - 键不能重复(唯一键)?您需要结合b)和c)并构建函数来验证是否存在这样的密钥,并执行您想要的操作:例如不允许插入,如果新值与旧值不同则更新值,或者以某种方式重建密钥(例如添加一些数字,使其唯一)
e)如何从字典中按键删除对:
To extend a little bit answer of Calimo I present few more things you may find useful while creating this quasi dictionaries in R:
a) how to return all the VALUES of the dictionary:
b) check whether dictionary CONTAINS KEY:
c) how to ADD NEW key, value pair to dictionary:
results:
d) how to fulfill the requirement of REAL DICTIONARY - that keys CANNOT repeat(UNIQUE KEYS)? You need to combine b) and c) and build function which validates whether there is such key, and do what you want: e.g don't allow insertion, update value if the new differs from the old one, or rebuild somehow key(e.g adds some number to it so it is unique)
e) how to DELETE pair BY KEY from dictionary:
包 hash 现已可用:
https://cran.r-project.org/web/packages/hash /hash.pdf
示例
The package hash is now available:
https://cran.r-project.org/web/packages/hash/hash.pdf
Examples
德克答案的简短变体:
Shorter variation of Dirk's answer:
,您可以从
table
中获得很多里程。我只想评论一下,当尝试“伪造”字典时,例如等
I'll just comment you can get a lot of mileage out of
table
when trying to "fake" a dictionary also, e.g.etc.