依靠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
答案 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"]
。
第五,搞乱环境是一个高级主题。你几乎不需要明确地使用它们。对于字典行为,如果所有值都是字符串,则使用字符向量。如果值具有不同的大小或类型,则使用列表。