2014-04-25 9 views
5

Ich bin ein wenig verwirrt von den Namen von unlist() produziert produziert. Bitte beachten Sie folgende MWEWie zu vermeiden unlist() Änderung der Listenbenennung

vector1 <- c(1,2,3,4,5,6,7,8,9,10) 
names(vector1) <- c(1,2,2,3,4,4,5,6,6,6) 
names(vector1) 
# [1] "1" "2" "2" "3" "4" "4" "5" "6" "6" "6" 
list1 <- split(vector1,names(vector1)) 
names(list1) 
# [1] "1" "2" "3" "4" "5" "6" 

aber dann

names(unlist(list1)) 
# [1] "1.1" "2.2" "2.2" "3.3" "4.4" "4.4" "5.5" "6.6" "6.6" "6.6" 

Gemäß der Dokumentation von unlist()

standardmäßig fehlenden oder die Benennung von Informationen in x zu halten versucht.

so kann ich dieses bestimmte Verhalten nicht sinnvoll machen.

Mein Problem ist, dass die Namen von unlist() nicht mit den Namen der ursprünglichen vector1 übereinstimmen können.

+0

Könnten Sie das bitte etwas verdeutlichen? Was genau versuchst du zu tun? –

+0

@RichardScriven Ich versuche zu verstehen, warum unlist() Namen wie "1.1" anstatt wie erwartet "1" ausgibt. – CptNemo

Antwort

6
unlist(unname(list1)) 
# 1 2 2 3 4 4 5 6 6 6 
# 1 2 3 4 5 6 7 8 9 10 
+0

auch 'unlist (list1, use.names = FALSE)' was ich denke, die Liste nicht kopiert, während die Namensgebung. –

+0

@MartinMorgan - Aber das lässt die Namen ganz fallen, was das OP nicht will. –

+0

Sorry hat die Frage nicht sorgfältig genug gelesen. –

5

Ich sympathisiere mit Ihrer Frustration. R ist (denke ich) versucht, sowohl die Informationen in names(x) und die Informationen in den Namen der ursprünglichen Komponenten (beachten Sie die Ergebnisse von unlist(setNames(list1,letters[1:6])), die das Verhalten macht mehr Sinn machen).

können Sie bekommen, was Sie wollen über

setNames(unlist(list1),unlist(lapply(list1,names))) 

obwohl es zugegebenermaßen peinlich ist - ich dies in eine unlistWithNames Funktion (oder etwas vernünftig genannt) machen würde, wenn ich es oft tun wollte. PS @ JoshOBriens Antwort ist einfacher, aber ich werde das hier lassen, weil es die Dinge ein wenig mehr erklärt.

+1

Und es wäre schwer für dich gewesen, weniger zu erklären;). Gute Antwort. (Ich war sofort losgegangen, um nach der allgemeineren Lösung für mehrfach verschachtelte Listen zu suchen, die, wie ich glaube, 'setNames (unlist (list1, recursive = T), rapply (list1, f = Namen, how =" unlist ")) '--- sehr ähnlich zu Ihrem Angebot.) –

Verwandte Themen