2015-10-20 16 views
6

Co się tutaj dzieje, gdy w R są zduplikowane nazwy list?Zduplikowane nazwy list w R

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

Wpisanie l[["B"]] powraca

$B 
[1] 5 

Wpisanie l zwrotów

$B 
[1] 5 

$B 
[1] 7 

$C 
[1] 9 

Czy istnieje standardowy sposób, aby pobrać wszystkie wartości dla "klucz" "B"?

+0

Dlatego właśnie powinieneś unikać powtarzania nazw. Nazwy mają być unikalne. – MrFlick

Odpowiedz

7

Gdy masz zduplikowane nazwy i wywołujesz podzbiór po nazwie, zwracany jest tylko pierwszy element. W rzeczywistości, [[ da ci tylko jeden element, więc spójrzmy na [.

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

Możemy również zobaczyć, że próbuje c("B", "B") jako podzbiór nawet nie dają nam prawo rezultat ponieważ R wraca i dostaje pierwszy B ponownie.

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

Jeden z najbezpieczniejszych sposobów, aby pobrać wszystkie B elementów jest użycie logicznego podzbiór names() wektorze. Da nam to właściwe elementy.

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

To doskonały przykład na to, dlaczego należy unikać powtarzania nazw.