Queremos obtener una matriz que tiene este aspecto:Repetición de una secuencia repetida
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
¿Cuál es la forma más fácil de hacerlo?
Queremos obtener una matriz que tiene este aspecto:Repetición de una secuencia repetida
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
¿Cuál es la forma más fácil de hacerlo?
Usted puede hacerlo con una sola rep
llamada. Los parámetros each
y times
se evalúan secuencialmente con el each
hecho primero.
rep(1:4, times=3, each=3)
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
Esta debería ser la respuesta aceptada, en mi opinión – Andrie
Como esto:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
rep (x, N) devuelve un vector repitiendo veces x N. Sapply aplica la función dada a cada elemento del vector 1: 4 por separado, repitiendo cada elemento 3 veces consecutivamente.
Debería echarle un vistazo a la respuesta de Dieter: el parámetro 'cada' haría lo que está haciendo mucho mejor que usar una llamada a Sapply. – Dason
O, más simple (suponiendo que quiere decir un vector, no un array)
rep(rep(1:4,each=3),3)
Aquí es un método que utiliza la manipulación de matrices con aperm
. La idea es construir una matriz que contenga los valores. Reorganícelos para que coincidan con la salida deseada utilizando aperm
, y luego "despliegue" la matriz con c
.
c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3)))
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
pensó en un bucle for, pero ¿no hay una manera más simple? –