相当于R中的python dict

use*_*015 71 python dictionary r

我想在R中使用相当于python的dict.基本上,在python中我有:

visited = {}

if atom_count not in visited:
  Do stuff
  visited[atom_count] = 1
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果我看到那个特定的atom_count,我已经访问过[atom_count] = 1.因此,如果我再次看到atom_count,我就不会"Do Stuff".Atom_Count是一个整数.

谢谢!

jor*_*ran 61

与R中最接近python dict的东西只是一个列表.与大多数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"
Run Code Online (Sandbox Code Playgroud)

现在通常的免责声明:它们并不完全相同 ; 会有分歧.因此,您将邀请失望尝试完全按照您在python中使用dict的方式使用列表.

  • @wondim您可以使用`names(list) &lt;- vector_of name`从变量设置列表项名称,子集赋值也可以,`names(list)[1] &lt;- "foo"`。另请参见“setNames()”。 (2认同)

use*_*472 7

如果像您的情况一样,您只希望“字典”存储相同类型的值,则可以简单地使用向量,并命名每个元素。

> l <- c(a = 1, b = 7, f = 2)
> l
a b f 
1 7 2
Run Code Online (Sandbox Code Playgroud)

如果要访问“密钥”,请使用names.

> names(l)
[1] "a" "b" "f"
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ker 5

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

如果你的字典很大而只有两列,那么这可能就是你要走的路.这是带有示例R代码的talkstats线程的链接:

哈希表链接