使用R“字典”返回键/值

时间:2014-07-06 07:10:01

标签: r dictionary hash environment

依靠the thread here,我将R“字典”改为如下:

boxes_sent <- vector(mode="list", length=4)
boxes_sent <- c("NE01", "NE02", "NE03", "NE04")
names(boxes_sent) <- c(seq(1:4))

boxes_rcvd <- vector(mode="list", length=4)
boxes_rcvd <- c("NW01", "NW02", "NW03", "NW04")
names(boxes_rcvd) <- c(seq(from = 13, to =16))

boxes_all <- c(boxes_rcvd, boxes_sent)

> boxes_all
13     14     15     16      1      2      3      4 
"NW01" "NW02" "NW03" "NW04" "NE01" "NE02" "NE03" "NE04"

names(boxes_all)[[1]]返回“NW01”时,调用boxes_all[[1]]返回“13”,两者都对应于列表中的第一项。但是,我认为这会根据我执行names(boxes_sent) <- c(seq(1:4))时建立的键/值对返回“NE01”。如何修改以便调用names(boxes_all)[[1]]返回“NE02”?在我的数据集中,我有39个键/值对的字典。

我想使用names()来执行此操作,但我尝试the thread here中建议的环境但没有成功:

boxes_sent<-new.env()
boxes_sent[["NE01", "NE02", "NE03", "NE04"]]<-c(seq(1:4))
boxes_rcvd <- new.env()
boxes_rcvd[["NW01", "NW02", "NW03", "NW04"]]<-c(seq(from = 13, to =16))

Error in boxes_sent[[c("NE01", "NE02", "NE03", "NE04")]] <- c(seq(1:4)) : 
  wrong args for environment subassignment

感谢您的时间和关注。

R版本3.0.3

1 个答案:

答案 0 :(得分:1)

第一件事:你不需要在R中指定变量类型。所以当你有如下代码时:

boxes_sent <- vector(mode="list", length=4)
boxes_sent <- c("NE01", "NE02", "NE03", "NE04")

您将boxes_sent定义为列表,然后将其重新定义为字符向量。所以第一行是浪费时间。

其次,c(seq(1:4))是三重矫枉过正。 1:4为您提供从1到4的数字序列,返回一个整数向量。与调用seq(1, 4)c(1, 2, 3, 4)相同。你不需要这三个人。

第三,为向量指定名称时,请注意这些名称存储为字符向量。 (这正是你想要的类字典行为。)注意

names(boxes_sent)
## [1] "1" "2" "3" "4"

第四,如果你想使用向量作为字典,那么你使用了错误的索引类型。字典的重点是你传递一个字符串作为索引(&#39;键&#39;)然后你得到一个值。

所以在这种情况下,你的键是字符串&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;,&#34; 4&#34;,& #34; 13&#34;,&#34; 14&#34;,&#34; 15&#34;,&#34; 16&#34;。因此,要检索值&#34; NE02&#34;,您需要传入密钥&#34; 2&#34;。也就是说,键入boxes_all["2"]

第五,搞乱环境是一个高级主题。你几乎不需要明确地使用它们。对于字典行为,如果所有值都是字符串,则使用字符向量。如果值具有不同的大小或类型,则使用列表。