Essentially Reduce allows us to sequentially pass the elements of a list into a binary function (any function that takes two parameters). I think giving the motivation and an example for Reduce really clears it up though.
A lot of times we want to apply a function to the first two elements of a vector (or list) and then apply the same function to the result and the third item in the vector, and then apply the function to the result of that and the fourth item in the vector, and so on until the end of the vector.
An easy example is let's say we have a function that adds two numbers together
myadd <- function(x, y) {
x + y
}
but what we really want is to add all the numbers in a vector together. We could first add the first and second elements, then add the result and the third element, … and so on.
mydata <- c(1, 2, 3, 4)
# Doing this by hand
myadd(myadd(myadd(mydata[1], mydata[2]), mydata[3]), mydata[4])
## [1] 10
But we can avoid that since this is exactly the statement that Reduce will build for us
Reduce(myadd, mydata)
## [1] 10
Clearly in this particular case it would make the most sense to use sum
sum(mydata)
## [1] 10
but a simple example like this is nice for understanding how Reduce actually works.