As with any language, there are often several ways to code up the solution to a programming problem in R. If performance of the code is important (i.e. it's something you plan to run many times, or with a lot of data), how you code the solution can often have a big impact on how fast it runs. For example, the RLangTip Twitter feed offered this tip last month:
The Me Nugget blog has practical example of this principle in action: in some simple tests, dynamically resizing a matrix (extending it with the rbind function) was more than 150x slower than assigning into an matrix with the dimensions pre-set. (The reason for this is that every time the matrix is extended, an entirely new block of memory must be assigned for the new, larger matrix and the data copied over. So don't do that.) Interestingly, the example shows that extending a list doesn't incur the same penalties — in R, each element of a list gets its own block of memory. So if you're not sure in advance how many elements you need to store, use a list, and then collect the results at the end with sapply or similar.
Me Nugget: Another aspect of speeding up loops in R