如何通过遍历列来创建字典/哈希表?

时间:2011-10-18 09:05:02

标签: r dictionary hashtable

我有两列数据框:键和值,我想使用每列的相应行为字典/哈希表的每个元素创建一个字典。

据我所知,使用R字典/散列表的典型方法是做类似的事情。

labels.dic <- c("Id of the item and some other description" = "id")

这很好用但是当我尝试使用数据框中的值(在示例中名为 lbls )时,它不起作用。为什么会这样?

labels.dic <- c(lbls[1,1]=lbls[1,2])
Error: unexpected '=' in "c(lbls[1,1] ="

3 个答案:

答案 0 :(得分:11)

在我看来,你得到了一些错误的信息。我甚至不确定你在哪里获得创建哈希表的语法。

在任何情况下:对于类似散列表的功能,您可能需要考虑使用environment:这些内部使用散列表(如果我没记错的话),所以要做你想做的事。

您可以使用以下内容:

someenv<-new.env()
someenv[["key"]]<-value

鉴于你的data.frame,这样的内容会填满它:

for(i in seq(nrow(lbls)))
{
  someenv[[ lbls[i,1] ]]<- lbls[i,2]
}

(注意:这要求第一列是实际的字符列,而不是因素!!)

然后,您可以使用someenv[["nameofinterest"]]轻松获取指定值。

答案 1 :(得分:3)

最简单的方法是在创建变量后更改names。所以你可以定义一个这样的函数:

cc <- function(name, value) {
    ret <- c(value)
    names(ret) <- name
    ret
}

cc(c(letters[1:2], "a name"), c(LETTERS[1:2], "a value"))

# output like this
#    a         b    a name 
#   "A"       "B" "a value" 

答案 2 :(得分:3)

与您在Python或Perl中看到的类似的另一个选项是hash包。请参阅:http://cran.r-project.org/web/packages/hash/

如果您的密钥特别长,那么我建议存储两个哈希表。首先,使用digest包散列密钥并存储从摘要映射到密钥的字典(散列表)(从密钥到摘要的映射已由digest包完成;-)),然后从摘要到您希望存储的值。这对我很有用。