2013-09-12 4 views
7

Как совместить этот список векторов по именам элементов?объединяет элементы списка на основе имен элементов

L1 <- list(F01=c(1,2,3,4),F02=c(10,20,30),F01=c(5,6,7,8,9),F02=c(40,50)) 

Таким образом, чтобы:

results <- list(F01=c(1,2,3,4,5,6,7,8),F02=c(10,20,30,40,50)) 

Я попытался применить следующее решение merge lists by elements names, но я не могу понять, как адаптировать это к моей ситуации.

ответ

8
sapply(unique(names(L1)), function(x) unname(unlist(L1[names(L1)==x])), simplify=FALSE) 
$F01 
[1] 1 2 3 4 5 6 7 8 9 

$F02 
[1] 10 20 30 40 50 
+0

Отлично, ваша жизнь заставка. В чем же цель немытия здесь, если я могу спросить? Спасибо. – Chargaff

+0

@Chargaff, без 'noname', каждый вектор имеет атрибут name, унаследованный от имени элемента списка. Попробуйте, и вы это увидите. Кроме того, лучше добавить 'simplify = FALSE' выше, чтобы избежать gettin матрицы вместо списка. Сейчас я редактирую ответ. –

+0

Вместо 'noname' вы можете добавить опцию' use.names = F' в 'unlist'. Но оба метода удаляют исходные имена вектора ... – durum

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