Sometimes it is useful to take a vector, or one column/row of a matrix, and build a new matrix of identical copies of that vector. There are lots of different ways to do this, but I just discovered a new, and very straightforward way to do this with matrix algebra, using the outer() function.
However, I wanted to see whether this new approach was really as fast as I thought it would be, so I wrote up a couple of different functions, all of which take the same input and produce the same output, and used the rbenchmark package to compare their speed. rbenchmark is extremely simple to use, and if you have any function that you expect to be applying hundreds or thousands of times, it’s worth trying to find a fast method to do it.
As you can see from the plot above, the outer()-based function was consistently fast, even as I increased the number of replications. Also, I confirmed for myself the oft-repeated advice to pre-allocate a matrix or vector when building up entries in a loop, rather than building the matrix as the loop progresses. The latter approach (simpleLoop) involves making a new copy of the matrix every iteration, which is indeed very slow.