2010-05-12 23 views
9

Próbuję powtórzyć elementy wektora a, b liczba razy. Oznacza to, że a = "abc" powinno być "aabbcc", jeśli y = 2.Powtórz elementy wektora w R

Dlaczego żaden z poniższych przykładów kodu nie działa?

sapply(a, function (x) rep(x,b)) 

iz pakietem plyr,

aaply(a, function (x) rep(x,b)) 

Wiem, że brakuje czegoś bardzo oczywistego ...

Odpowiedz

10

Zakładając a jest wektorem, sapply stworzy matrycę, która po prostu musi być zwinięte z powrotem do wektora:

a<-c("a","b","c") 
b<-3 # Or some other number 
a<-sapply(a, function (x) rep(x,b)) 
a<-as.vector(a) 

powinny stworzyć następujący wynik:

"a" "a" "a" "b" "b" "b" "c" "c" "c" 
+0

Zapomniałem o zwijaniu go. To oczywiście działa. Nie mam pewności, dlaczego plyr się nie zajmuje. No cóż. – bshor

16

a nie jest wektorem, trzeba podzielić ciąg na pojedyncze znaki, np

R> paste(rep(strsplit("abc","")[[1]], each=2), collapse="") 
[1] "aabbcc" 
+2

"each =" argument do rep jest również godne uwagi. :-) –

+0

Popełniłem błąd w moim opisie tego pytania, a istotnie miał to być wektor, np. A = c ("a", "b", "c"). Jeśli tak nie było, twoje rozwiązanie jest oczywiście poprawne. Dzięki! – bshor

Powiązane problemy