2010-06-01 18 views
17

Dizelerle ilgili bir vektör var. Benim vektör kontrol edin, bu awesome var:Dizelerin bir vektöründen benzersiz bir isim kümesi nasıl oluşturulur?

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

Ben awesome ama gerekirse dizeleri uniqueified edilmiş, aynı uzunlukta olan yeni bir vektör yapmak istiyorum. Örneğin benim istenen fonksiyonun geçerli bir çıkış yapmak için kolay, R-thonic ve güzel bir yolu var mı

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

olurdu? Listemi gerçek hayatta (awesome olarak adlandırılmamış) 25000ish mircoarray probeset tanımlayıcısı içerdiğini söylemeliyim.

Bazı R guru'ların geçmişte bu probleme rastladığından emin olduğum bazı jenerik işlevleri yazmaya başladığımda (ki bunu yapabileceğime eminim) her zaman gerginim, bazı inanılmaz algoritmalarla çivilenmişim. Bu, vektörün yarısından fazlasında bir öğe saklamak zorunda bile değil. Sadece ne denebileceklerinden emin değilim. Muhtemelen uniqueify. yardım sayfasının ilk örneği zaten yer-üstünde nereye

cevap

19

make.unique() deneyin:

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

yardım sayfası yazar olarak Thomas Minka listeler. :)

+1

bütün cevabı yapmak için bir gün ona bir bira al ... make.unique (strsplit) '' (mükemmellik [[1]]) Bir karakterin içine kelimeyi ayırmak gerekir vektör – John

+0

Gönderme başlığı ve orijinal örnek, 'dizginin vektörünü' gösterir, dolayısıyla strsplit() 'ye ihtiyacımız olduğunu düşünmüyorum. –

+0

gerçekten bu benim stackoverflow üzerinde benim en temiz soru/cevap deneyimim olmuştur. Çok teşekkürler! Minka'ya bir bira vereceğim ve fırsat bulamam gerekecek. Sanırım, bu paterni takip ederek, ona EP için bir bira borcum var ve 'kapıları' gösterimini geliştirmedi mi? Muhtemelen onun için de bira almalı. –

İlgili konular