2015-10-20 7 views
6

Что происходит здесь, когда в R?Дублирующиеся имена списков в R

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

Typing l[["B"]] возвращает

$B 
[1] 5 

Typing 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 

Это отличный пример того, почему следует избегать дублирования имен.

Смежные вопросы