如何通过遍历列来创建字典/散列表?
我有一个两列的数据框:键和值,我想创建一个字典使用字典/哈希表的每个元素的每个列的相应行。如何通过遍历列来创建字典/散列表?
据我了解,使用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] ="
回答:
在我看来你已经得到了一些错误的信息。我甚至不确定你在哪里得到创建散列表的语法的想法。
在任何情况下:对于类似散列表的功能,您可能需要考虑使用environment
:这些工作可以在内部使用散列表(如果我没有记错的话),所以请按照您的要求进行操作。
你可以使用此类似:
someenv<-new.env() someenv[["key"]]<-value
鉴于你data.frame
,这样的事情将填补起来:
for(i in seq(nrow(lbls))) {
someenv[[ lbls[i,1] ]]<- lbls[i,2]
}
(注:这需要第一列是一个实际的字符列,不是因素!!)
然后,您可以通过使用someenv[["nameofinterest"]]
轻松获得指定值。
回答:
最简单的方法是在创建变量后更改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"
回答:
另一种类似于您用Python或Perl看到的选项是hash
包。请参阅:http://cran.r-project.org/web/packages/hash/
如果您的密钥特别长,那么我建议存储两个散列表。首先,使用digest
包对散列密钥进行散列,并存储从摘要到密钥(从密钥到摘要的映射已由digest
包完成;-))的字典(散列表),然后从摘要到值你想存储。这对我很好。
以上是 如何通过遍历列来创建字典/散列表? 的全部内容, 来源链接: utcz.com/qa/262146.html