2010-05-12 4 views
9

Я пытаюсь повторить элементы вектора a, b числа раз. То есть a = «abc» должно быть «aabbcc», если y = 2.Повторить элементы вектора в R

Почему не работает ни один из следующих примеров кода?

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

и из пакета plyr,

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

Я знаю, что я что-то очень очевидное отсутствие ...

ответ

10

Предполагая, что вы a вектор, sapply создаст матрицу, которая просто должна быть свернуты обратно в вектор:

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

Если создать следующий вывод:

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

Забыл о его разрушении. Это, очевидно, работает. Не знаю, почему у plyr's aaply нет. Ну что ж. – bshor

16

a не является вектором, вы должны разделить строку на одного символов, например

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

Примечателен и аргумент «each =». :-) –

+0

Я сделал ошибку в моем письме о вопросе, а на самом деле означало быть вектором, например a = c ("a", "b", "c"). Если бы это было не так, ваше решение, очевидно, было правильным. Благодаря! – bshor