R语言中是否有类似于Python中的“dict”或C++中的“map”的功能?

10

我刚开始学习R编程。查看了一些教程后,我掌握了大部分需要的知识,但仍有一件事情不清楚:数据结构图。

请问R语言是否有字典?我能否将键值对存储在其中?

谢谢!


1
你把Python术语和C++混淆了。*dict是存储(键,值)对的数据结构。map(somefn,someseq)是一个函数,它将somefn应用于someseq*中的每个元素。 - smci
5个回答

9
是的,它可以,并且被称为“列表(list)”。
> x <- list(a=1, b="foo", c=c(1,1,2,3,5))
> x
$a
[1] 1

$b
[1] "foo"

$c
[1] 1 1 2 3 5

在Python中,它被称为“dict”。

2
还有一个 pairlist 函数。 - IRTFM

5

环境也是一个备选项,在许多情况下是最佳选择。

e<-new.env(hash=T)
e$a<-1
e$b<-2

R> e$a
[1] 1

列表的不足之处在于它是一种线性搜索。

1
一个环境是否使用比线性搜索更好的方法?在你的经验中,有多少成员需要进行线性搜索才会导致性能问题? - David Heffernan
1
这篇文章简要介绍了R语言中的查找性能。简而言之,如果您是按索引进行查找,则数组是最好的选择,但如果您是按标签进行查找,则哈希环境更好。没有比1024更小的东西,但即使在这种情况下,对于标签搜索,环境也更好。如果您有一个小的查找表,则向量可能更好。 - Andrew Redd

3

由于数组/向量元素可以被命名,因此您可以获得一些内置的映射/字典属性。

x <- c(apple = 1, banana = 99, "oranges and lemons" = 33)
x["apple"]
x[c("bananas", "oranges and lemons")]
x[x == 99]

如果您的值是不同类型的,则需要使用list而不是向量。

3

哈希包提供的哈希类包装了一个哈希环境,提供了更多方法,但也增加了一些开销。 - Andrew Redd

0

如前所述,哈希包确实会增加一些开销,但提供了一种灵活、直观的访问映射/哈希/字典的方法。对于来自其他语言的用户来说,理解它应该非常容易。

如果列表元素较少(<200左右),则列表是最佳解决方案。

如果您绝对不能容忍一点开销,并且不想要灵活、直观的方法,则最好使用环境。

在大多数情况下,哈希包是最好的选择。

C-


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接