Efficacement répliquer les matrices dans la R

J'ai une matrice et cherchez un moyen efficace pour répliquer il n fois (où n est le nombre d'observations dans le jeu de données). Par exemple, si j'ai une matrice A

A <- matrix(1:15, nrow=3)

puis j'ai envie d'une sortie de la forme

rbind(A, A, A, ...) #n times.

Évidemment, il existe de nombreuses façons de construire une telle matrice de grande taille, par exemple à l'aide d'un for boucle ou apply ou des fonctions similaires. Toutefois, l'appel à la "matrice de la réplication de la fonction" prend place dans le cœur de mon algorithme d'optimisation où il est appelé des dizaines de milliers de fois durant une exécution de mon programme. Par conséquent, les boucles, appliquez-type de fonctions et quelque chose de similaire qui ne sont pas assez efficaces. (Une telle solution serait fondamentalement signifie qu'une boucle sur n est effectuée à des dizaines de milliers de fois, ce qui est évidemment inefficace.) J'ai déjà essayé d'utiliser l'ordinaire rep de la fonction, mais n'ont pas trouvé une façon d'organiser la sortie de rep dans une matrice de format souhaité.

La solution
do.call("rbind", replicate(n, A, simplify=F))
est également trop inefficace, parce que rbind est utilisé trop souvent dans ce cas. (Puis, environ 30% de la durée totale d'utilisation de mon programme sont passé à effectuer les rbinds.)

Quelqu'un sait-il une meilleure solution?

  • rbind est seulement utilisé une fois dans le do.call façon. c'est la réplication, qui est probablement l'entraînant vers le bas.
  • Je l'ai testé avec Rprofet rbind a pris environ deux fois plus de temps que replicate. J'ai également été surpris par cela.