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

我有一个两列的数据框:键和值,我想创建一个字典使用字典/哈希表的每个元素的每个列的相应行。如何通过遍历列来创建字典/散列表?

据我了解,使用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

回到顶部