2012-05-21 69 views
48

我想在R. Python字典的基本上相当于,在python我有:相当于R中Python字典

visited = {} 

if atom_count not in visited: 
    Do stuff 
    visited[atom_count] = 1 

的想法是,如果我看到具体的,atom_count,我已经访问了[atom_count] = 1。因此,如果我再次看到atom_count,我不会“做东西”。 Atom_Count是一个整数。

谢谢!

+0

'ifelse'和'%'%? – Chase

+4

看到R package'hash'和它几乎类似Python的访问函数。 –

回答

45

R中最接近python字典的仅仅是一个列表。最喜欢的R数据类型,列表可以有一个名字属性,可以让列表来像一组名称 - 值对:

> l <- list(a = 1,b = "foo",c = 1:5) 
> l 
$a 
[1] 1 

$b 
[1] "foo" 

$c 
[1] 1 2 3 4 5 

> l[['c']] 
[1] 1 2 3 4 5 
> l[['b']] 
[1] "foo" 

现在的平常免责声明:他们不是完全相同相同;会有分歧。因此,你会失望地试图按照你在python中使用字典的方式来使用列表。

+0

你如何以编程方式遍历这样的列表?天真的名字(l)[1]'显然失败了。我也一直无法获得'l [which]]的工作 –

+0

@MikePalmice除了'for'循环,这在几乎所有的语言中都是一种选择,有'lapply'。也有不同的语法相关的东西,比如'Map'和一个完整的包,** purrr **用于很多函数式编程的东西。 – joran

5

我相信使用散列表(创建一个新的环境)可能是解决您的问题。我打算如何做到这一点,但昨天我在talkstats.com上做了这个。

如果你的字典很大,只有两列,那么这可能是要走的路。这里的链接到talkstats螺纹与样品R代码:

HASH TABLE LINK

+0

请注意'data.table'和R自己命名的向量查找在这个时间以来的速度已经大大提高了。 –