2015-04-27 20 views
7

Ich habe den folgenden Vektor:Fall unempfindlich Art von Vektor-String in R

mylist <- c("MBT.LN.ID", "ISA51VG.LN.ID", "R848.LN.ID", "sHz.LN.ID", "FK565.LN.ID", 
    "bCD.LN.ID", "MALP2s.LN.ID", "ADX.LN.ID", "AddaVax.LN.ID", "FCA.LN.ID", 
    "Pam3CSK4.LN.ID", "D35.LN.ID", "ALM.LN.ID", "K3.LN.ID", "K3SPG.LN.ID", 
    "MPLA.LN.ID", "DMXAA.LN.ID", "cGAMP.LN.ID", "Poly_IC.LN.ID", 
    "cdiGMP.LN.ID") 

Ich mag würde sie in alphabetischer Reihenfolge in Groß- und Kleinschreibung sortieren.

Die erwartete Ausgabe ist dies:

[1] "AddaVax.LN.ID" "ADX.LN.ID"  "ALM.LN.ID"  "bCD.LN.ID"  "cdiGMP.LN.ID" "cGAMP.LN.ID" 
[7] "D35.LN.ID"  "DMXAA.LN.ID" "FCA.LN.ID"  "FK565.LN.ID" "ISA51VG.LN.ID" "K3.LN.ID"  
[13] "K3SPG.LN.ID" "MALP2s.LN.ID" "MBT.LN.ID"  "MPLA.LN.ID"  "Pam3CSK4.LN.ID" "Poly_IC.LN.ID" 
[19] "R848.LN.ID"  "sHz.LN.ID" 

Ich habe versucht, dies aber nicht (R.3.2.0 alpha verwenden):

> sort(mylist) 
[1] "ADX.LN.ID"  "ALM.LN.ID"  "AddaVax.LN.ID" "D35.LN.ID" 
[5] "DMXAA.LN.ID" "FCA.LN.ID"  "FK565.LN.ID" "ISA51VG.LN.ID" 
[9] "K3.LN.ID"  "K3SPG.LN.ID" "MALP2s.LN.ID" "MBT.LN.ID" 
[13] "MPLA.LN.ID"  "Pam3CSK4.LN.ID" "Poly_IC.LN.ID" "R848.LN.ID" 
[17] "bCD.LN.ID"  "cGAMP.LN.ID" "cdiGMP.LN.ID" "sHz.LN.ID" 
+3

Die Ausgabe von 'sort' auf Ihrem Standort abhängig: http://stackoverflow.com/a/7229428/3710546 –

+1

ich die erwartete Ausgabe mit' Art (mylist) '. Was ist dein Gebietsschema? – Cath

+0

@CathG: 'LANG = en_US.UTF-8 LC_CTYPE = "C" LC_NUMERIC = "C" LC_TIME = "C" LC_COLLATE = "C" LC_MONETARY = "C" LC_MESSAGES = "C" LC_PAPER = "C" LC_NAME = "C" LC_ADDRESS = "C" LC_TELEPHONE = "C" LC_MEASUREMENT = "C" LC_IDENTIFICATION = "C" LC_ALL = C' – pdubois

Antwort

12

Versuchen

mylist[order(tolower(mylist))] 
+1

@DavidArenburg, ja, ich wollte meine lokalen Einstellungen nicht ändern, aber ich fragte mich, ob es funktionieren würde (danke, dass du es getan hast). Also Sortierung = C sorgt für Ordnung und Sortierung nach Groß-/Kleinschreibung – Cath

6

Wie von @Pascal, dies ist in help(Comparison) dokumentiert und sort ist lokal spezifisch. Eine Option ist das Umschalten Ihres lokalen (zum Beispiel Sys.setlocale("LC_TIME", "us")), aber das könnte unbequem sein. Eine andere Möglichkeit könnte die Verwendung von gtools::mixedsort sein, was auch nützlich sein könnte, weil die Zeichenfolge auch Zahlen enthält.

library(gtools) 
mixedsort(mylist) 

# [1] "AddaVax.LN.ID" "ADX.LN.ID"  "ALM.LN.ID"  "bCD.LN.ID"  "cdiGMP.LN.ID" "cGAMP.LN.ID" "D35.LN.ID"  "DMXAA.LN.ID" "FCA.LN.ID"  "FK565.LN.ID" 
# [11] "ISA51VG.LN.ID" "K3.LN.ID"  "K3SPG.LN.ID" "MALP2s.LN.ID" "MBT.LN.ID"  "MPLA.LN.ID"  "Pam3CSK4.LN.ID" "Poly_IC.LN.ID" "R848.LN.ID"  "sHz.LN.ID" 
3
> library(searchable) 
> sort(ignore.case(mylist)) 
[1] "AddaVax.LN.ID" "ADX.LN.ID"  "ALM.LN.ID"  "bCD.LN.ID"  "cdiGMP.LN.ID" 
[6] "cGAMP.LN.ID" "D35.LN.ID"  "DMXAA.LN.ID" "FCA.LN.ID"  "FK565.LN.ID" 
[11] "ISA51VG.LN.ID" "K3.LN.ID"  "K3SPG.LN.ID" "MALP2s.LN.ID" "MBT.LN.ID"  
[16] "MPLA.LN.ID"  "Pam3CSK4.LN.ID" "Poly_IC.LN.ID" "R848.LN.ID"  "sHz.LN.ID"