Problema
Digamos que eu tenha esta matriz em R:
(x <- matrix(1:6, ncol = 3, byrow = TRUE))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
que eu quero combinar por linhas várias vezes. Aqui está um exemplo usandorbind()
rbind(x, x)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 1 2 3
[4,] 4 5 6
O problema é que quero fazer isso um número indefinido de vezes dentro de uma função e estou tentando evitar ficar x
fazendo cópias dela.
O que eu tentei até agora
Tentei várias operações envolvendo replicate()
, array()
, matrix()
, *apply()
, e o mais próximo que cheguei do que queria foi isso (para duas repetições):
replicate(2, rbind(x))
, , 1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
, , 2
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
Se eu tentar transformar isso em uma matriz, os elementos ficam misturados por causa de como a sequência da matriz é armazenada:
as.vector(replicate(2, rbind(x)))
[1] 1 4 2 5 3 6 1 4 2 5 3 6
Uma solução desajeitada
Até agora, a única maneira de conseguir o que queria foi abusando de t()
:
t(array(t(x), dim = c(ncol(x), nrow(x) * 2)))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 1 2 3
[4,] 4 5 6
Aposto que há uma maneira mais limpa de fazer isso, mas depois de algumas horas estou perplexo. Alguém ajuda?
Perguntas relacionadas
Aqui estão algumas perguntas relacionadas com soluções que tentei sem sucesso:
Você poderia tentar
replicate
com opçãosimplify = FALSE
e usardo.call(rbind,...)
por sua vezkronecker
aperm
rep
Usando
matrix
witht
e os argumentos apropriados: