我有两列数据框:键和值,我想使用每列的相应行为字典/哈希表的每个元素创建一个字典。
据我所知,使用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] ="
答案 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
包完成;-)),然后从摘要到您希望存储的值。这对我很有用。