When applying an operation to two vectors that requires them to be the same length, R automatically recycles, or repeats, the shorter one, until it is long enough to match the longer one. Here is an example:
> c(1,2,4) + c(6,0,9,20,22) [1] 7 2 13 21 24 Warning message: longer object length is not a multiple of shorter object length in: c(1, 2, 4) + c(6, 0, 9, 20, 22)
The shorter vector was recycled, so the operation was taken to be as follows:
> c(1,2,4,1,2) + c(6,0,9,20,22)
> x [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > x+c(1,2) [,1] [,2] [1,] 2 6 [2,] 4 6 [3,] 4 8
Again, keep in mind that matrices are actually long vectors. Here, x
, as a 3-by-2 matrix, is also a six-element vector, which in R is stored column by column. In other words, in terms of storage, x
is the same as c(1,2,3,4,5,6)
. We added a two-element vector to this six-element one, so our added vector needed to be repeated twice to make six elements. In other words, we were essentially doing this:
x + c(1,2,1,2,1,2)
Not only that, but c(1,2,1,2,1,2)
was also changed from a vector to a matrix having the same shape as x
before the addition took place:
1 2 2 1 1 2
Thus, the net result was to compute the following: