2010-06-01 12 views
17

Possiedo un vettore di stringhe. Guarda il mio vettore, è awesome:Come creare un set univoco di nomi da un vettore di stringhe?

> awesome 
[1] "a" "b" "c" "d" "d" "e" "f" "f" 

mi piacerebbe fare un nuovo vettore che è la stessa lunghezza awesome ma dove, se necessario, le corde sono state uniqueified. Ad esempio, un'uscita valida della mia funzione desiderata sarebbe

> awesome.uniqueified 
[1] "a" "b" "c" "d.1" "d.2" "e" "f.1" "f.2" 

C'è un, R-thonic e bello modo semplice per fare questo? Devo dire che la mia lista nella vita reale (non si chiama awesome) contiene 25000 identificatori di probe probe mircoarray.

Sono sempre nervoso quando mi imbarco nello scrivere piccole funzioni generiche (che sono sicuro che potrei fare) poiché sono sicuro che qualche guru R ha incontrato questo problema in passato, inchiodandolo con un algoritmo incredibile che non ha nemmeno bisogno di memorizzare più della metà di un elemento nel vettore. Non sono sicuro di come avrebbero potuto chiamarlo. Probabilmente no uniqueify.

risposta

19

Prova make.unique() dove il primo esempio della pagina di aiuto è già spot-on:

make.unique(c("a", "a", "a")) 
[1] "a" "a.1" "a.2" 

La pagina di aiuto elenca Thomas Minka come autore. Acquista lui una birra un giorno :)

+1

per rendere l'intera risposta ... make.unique (strsplit (impressionante, '') [[1]]) è necessario separare la parola in un personaggio vector – John

+0

Il titolo del post e l'esempio originale mostrano "vector of strings" quindi non penso che abbiamo bisogno di 'strsplit()'. –

+0

questa è stata la mia esperienza di domande/risposte più pulita in assoluto su StackOverflow. Grazie mille! Avrò sicuramente la birra del dottor Minka nel caso ne avessi l'occasione. Suppongo, seguendo questo schema, gli devo birra per l'EP e non ha sviluppato la notazione 'gates'? Probabilmente dovrebbe dargli la birra anche per quello. –

Problemi correlati