Fojtasek
Fojtasek

Reputation: 3591

multiplying all elements of a vector in R

I want a function to return the product of all the values in a vector, like sum but with multiplication instead of addition. I expected this to exist already, but if it does I can't find it. Here's my solution:

product <- function(vec){
    out <- 1
    for(i in 1:length(vec)){
         out <- out*vec[i]
    }
    out
}

This behaves the way I want it to. For example:

> product(1:3)
[1] 6

Is there a better way of doing this, either with an existing function or through an improvement to this custom one?

Upvotes: 51

Views: 81475

Answers (3)

Pablo Adames
Pablo Adames

Reputation: 644

This is a textbook use case for a reduce function, one of the foundational pillars of functional programming. Try this:

Reduce(x=1:5, f='*')

It produces 120 as expected.

Upvotes: 1

geotheory
geotheory

Reputation: 23630

If your data is all greater than zero this is a safer solution that will not cause compute overflows:

exp(sum(log(x)))

Upvotes: 6

rcs
rcs

Reputation: 68809

You want prod:

R> prod(1:3)
[1] 6

Upvotes: 92

Related Questions