2015-10-20 15 views
6

Cosa succede qui quando in R sono presenti nomi di elenchi duplicati?Nome elenco duplicato in R

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

Digitando l[["B"]] rendimenti

$B 
[1] 5 

Digitando l rendimenti

$B 
[1] 5 

$B 
[1] 7 

$C 
[1] 9 

C'è un modo standard per recuperare tutti i valori per la "chiave" "B"?

+0

Questo è il motivo per cui dovresti davvero evitare di avere nomi duplicati. I nomi sono pensati per essere unici. – MrFlick

risposta

7

Quando si hanno nomi duplicati e si chiama un sottoinsieme per nome, viene restituito solo il primo elemento. Infatti, [[ ti darà sempre solo un elemento, quindi guardiamo invece a [.

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

possiamo anche vedere che cercare c("B", "B") come il sottoinsieme non sarà nemmeno darci il risultato giusto, perché R va avanti e ottiene il primo B di nuovo.

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

Uno dei modi più sicuri per recuperare tutti gli elementi B è quello di utilizzare un sottoinsieme logico della names() vettore. Questo ci darà gli elementi corretti.

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

Questo è un ottimo esempio del perché i nomi duplicati dovrebbero essere evitati.