02. Vector Arithmetic and Recycling

Vectors can use simple arithmetic expressions (+, -, *, /) to perform basic operations. Let's first look at addition, then discuss a caveat of vector arithmetics.

Addition and Subtraction

You can add or subtract the corresponding elements of two or more vectors of the same length together.

> c(1,2,3) + c(99,98,97)
[1] 100 100 100
> c(1,2,3) + c(4,5,6)
[1] 5 7 9
> c(1,2,3) - c(1,1,1)
[1] 0 1 2

But what would happen if all the vectors weren't of the same length? Instead of erroring out, R performs recycling.


Recycling occurs when vector arithmetic is performed on multiple vectors of different sizes. R takes the shorter vector and repeats them until it becomes long enough to match the longer one.

> c(1,2,3,4,5,6) + c(1,3)
[1] 2 4 3 7 6 9

As you can see, the c(1,3) vector repeated itself to form c(1,3,1,3,1,3) so that it could successfully match the previous term.

If the shorter vector is not a vector of the longer one, then a warning message appears, but the operation still takes place.

> c(1,2,3,4,5) + c(1,3)
[1] 2 5 4 7 6
Warning message:
In c(1, 2, 3, 4, 5) + c(1, 3) :
  longer object length is not a multiple of shorter object length

Multiplication and Division

Multiplying or dividing vectors is similar to addition and subtraction in that each corresponding element matches up and a product is formed. When the sizes differ, recycling occurs.

> c(1,2,3) * c(0,3,6)
[1] 0 6 18
> c(1,3,5) * c(2,4)
[1] 2 12 10
Warning message:
In c(1, 3, 5) * c(2, 4) :
  longer object length is not a multiple of shorter object length

Operators are mere functions

One small detail to notice is that these common arithmetic expressions are actually functions. Thus, they can be with a similar function notation.

> "*"(5,6)
[1] 30


We can also perform the modulo operator, which outputs the remainder after division of two numbers.

> c(55,54,53) %% c(3)
[1] 1 0 2

Advanced Linear Algebra Operations

You can also apply linear algebra on your vectors in R. To calculate the cross product, use crossprod():

> crossprod(1:3, 4:6)
[1,]    32

You'll notice that the return type isn't a new vector, but instead a one-dimensional matrix. We'll look at matrices in the next lesson.

Take your Linux skills to the next level!

Command Line Kung Fu

Take your Linux skills to the next level! Try Linux & UNIX

Command Line Kung Fu is packed with dozens of tips and practical real-world examples. You won't find theoretical examples in this book. The examples demonstrate how to solve actual problems. The tactics are easy to find, too. Each chapter covers a specific topic and groups related tips and examples together.

$ Check price
14.9914.99Amazon 4.5 logo(27+ reviews)

More Linux & UNIX resources

Learn to be a Pythonista!

Python Programming

Learn to be a Pythonista! Try Python

This book is designed to be used as the primary textbook in a college-level first course in computing. It takes a fairly traditional approach, emphasizing problem solving, design, and programming as the core skills of computer science. However, these ideas are illustrated using a non-traditional language, namely Python.

$ Check price
45.9945.99Amazon 4.5 logo(211+ reviews)

More Python resources