2015-10-20 59 views
6

R中有重复列表名称时发生了什么?R中重复列表名称

l <- list() 
l[["A"]] <- 5 
l[["B"]] <- 7 
l[["C"]] <- 9 
names(l) <- c("B", "B", "C") 

打字l[["B"]]回报

$B 
[1] 5 

打字l回报

$B 
[1] 5 

$B 
[1] 7 

$C 
[1] 9 

有检索所有值的 “钥匙”, “B” 的标准方式?

+0

这就是为什么你真的应该避免重复名称。名字是唯一的。 – MrFlick

回答

7

当您有重复的名称,并按名称调用子集时,只返回第一个元素。实际上,[[反正只会给你一个元素,所以我们来看看[

l["B"] 
# $B 
# [1] 5 

我们也可以看到,试图c("B", "B")的子集甚至不会给我们正确的结果,因为R会回来,并再次获得第一B

l[c("B", "B")] 
# $B 
# [1] 5 
# 
# $B 
# [1] 5 

一个检索所有B元素的最安全的方式是使用names()向量的逻辑子集。这会给我们正确的元素。

l[names(l) == "B"] 
# $B 
# [1] 5 
# 
# $B 
# [1] 7 

这是避免重复名称的一个很好的例子。