У меня есть матрица и ищут эффективный способ ее повторения n раз (где n - количество наблюдений в наборе данных). Например, если у меня есть матрица A
A <- matrix(1:15, nrow=3)
то я хочу получить результат формы
rbind(A, A, A, ...) #n times
.
Очевидно, что существует множество способов построения такой большой матрицы, например, с использованием цикла for
или apply
или подобных функций. Однако вызов функции "матрица-репликация" происходит в самом ядре моего алгоритма оптимизации, где он называется десятками тысяч раз в течение одного запуска моей программы. Поэтому петли, функции типа приложения и все, что с ними похоже, недостаточно эффективны. (Такое решение в основном означало бы, что цикл над n выполняется десятки тысяч раз, что, очевидно, неэффективно.) Я уже пытался использовать обычную функцию rep
, но не нашел способ упорядочить вывод rep
в матрице желаемого формата.
Решение
do.call("rbind", replicate(n, A, simplify=F))
также слишком неэффективен, потому что rbind
используется слишком часто в этом случае. (Затем около 30% от общей продолжительности выполнения моей программы тратится на выполнение rbinds.)
Кто-нибудь знает лучшее решение?