2010-06-23 3 views

ответ

2

Это то, что вы хотите?

unlist(lapply(rep(seq(1, 121, by=10), each=2), function(x) seq(x, x+9))) 
1

Я думаю, что это сделаете.

x <- ((0:12)*10)+1 
y <- x + 9 

repeatVectors <- function(x,y){ 
    rep(seq(x,y),2) 
} 

z <- mapply(repeatVectors, x,y) 
z <- as.vector(z) 
18

Также вы можете сделать:

rep(1:10, 26) + rep(seq(0,120,10), each=20) 
+0

элегантный! И учитывая количество способов добраться до результата, я чувствую себя немного лучше о том, что меня обманывают. – dnagirl

+0

Даже rep (1:10, 2) + rep (seq (0,120,10), each = 20) будет работать –

+0

крыс, пришел к этому поздно и подумал, что у меня был самый быстрый, но это так близко к оптимальному решению. м, просто проголосуйте за него. Чтобы сделать это еще быстрее, используйте «rep (0:12, each = 20) * 10» после знака +. (6x speedup в целом) – John

2

В качестве альтернативы, вы можете использовать комбинацию rep и outer, таких как:

c(outer(1:10,rep(0:12,each=2),function(x,y)10*y+x)) 
3

Другой способ:

x <- matrix(1:130, 10, 13) 
c(rbind(x, x)) 

Возможно более эффективная версия:

x <- 1:130 
dim(x) <- c(10,13) 
c(rbind(x, x)) 
1

Метод с использованием split является

unlist(rep(split(seq_len(130), rep(1:13, each=10)), each=2), use.names=FALSE) 

 Смежные вопросы

  • Нет связанных вопросов^_^