2015-10-20 131 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 

這是避免重複名稱的一個很好的例子。