2015-10-20 7 views
6

Was passiert hier, wenn doppelte Listennamen in R vorhanden sind?Doppelte Listennamen in R

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

Typing l[["B"]] kehrt

$B 
[1] 5 

Typing l kehrt

$B 
[1] 5 

$B 
[1] 7 

$C 
[1] 9 

Gibt es eine standardisierte Möglichkeit, alle Werte für den "Schlüssel" "B" zurückzuholen?

+0

Deshalb sollten Sie vermeiden, doppelte Namen zu haben. Namen sollen einzigartig sein. – MrFlick

Antwort

7

Wenn Sie doppelte Namen haben und eine Untergruppe namentlich aufrufen, wird nur das erste Element zurückgegeben. Tatsächlich wird [[ Ihnen immer nur ein Element geben, also schauen wir uns stattdessen [ an.

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

können wir auch sehen, dass c("B", "B") als Teilmenge versucht, wird nicht einmal geben uns das richtige Ergebnis, weil R geht zurück und bekommt die erste B wieder.

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

Einer der sichersten Wege, alle B Elemente abzurufen ist eine logische Teilmenge des names() Vektor zu verwenden. Dies wird uns die richtigen Elemente geben.

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

Dies ist ein gutes Beispiel dafür, warum doppelte Namen vermieden werden sollten.