2011-01-24 78 views
8

我是R编程新手。在检查了一些教程后,我拿起了我需要的大部分东西,但还是有一件东西丢失了:数据结构图。R和Python中的'dict'一样吗?

大家知道R是否有字典吗?我可以存储(键,值)对吗?

谢谢!

+1

您将Python术语与C++混淆了。 *`dict` *是存储(键,值)对的数据结构。 *`map(somefn,someseq)`*是一个函数,它将``somefn` *应用于*`someseq` *中的每个元素。 – smci 2011-12-05 22:38:55

回答

8

是的,它被称为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`函数 – 2011-01-24 23:42:29

3

还有就是hash包..

+0

散列包中提供的散列类包装了散列环境,提供了更多的方法,但也增加了一些开销。 – 2011-01-25 06:20:10

5

环境也是一个人选,而在很多情况下是最好的选择。

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

R> e$a 
[1] 1 

列表的缺点是它是一个线性搜索。

+1

环境使用比线性搜索更好的东西吗?根据您的经验,在线性搜索性能变得麻烦之前,您需要多少成员? – 2011-01-25 10:59:57

2

由于可以命名数组/矢量元素,因此可以获得地图/字典内置的一些属性。

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

(如果你的价值观是不同类型的,那么你就需要使用list,而不是一个向量的。)

0

哈希封装前述确实增加了一个小的开销,但确实提供了一个灵活,直观访问地图/散列/字典的方法。来自其他语言的用户应该很容易理解它。

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

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

散列包在大多数情况下是最好的。

C-