# Functional programming

## Built-in Higher Order Functions

R has a set of built in higher order functions: `Map`, `Reduce`, `Filter`, `Find`, `Position`, `Negate`.

`Map` applies a given function to a list of values:

``````words <- list("this", "is", "an", "example")
Map(toupper, words)
``````

`Reduce` successively applies a binary function to a list of values in a recursive fashion.

``````Reduce(`*`, 1:10)
``````

`Filter` given a predicate function and a list of values returns a filtered list containing only values for whom predicate function is TRUE.

``````Filter(is.character, list(1,"a",2,"b",3,"c"))
``````

`Find` given a predicate function and a list of values returns the first value for which the predicate function is TRUE.

``````Find(is.character, list(1,"a",2,"b",3,"c"))
``````

`Position` given a predicate function and a list of values returns the position of the first value in the list for which the predicate function is TRUE.

``````Position(is.character, list(1,"a",2,"b",3,"c"))
``````

`Negate` inverts a predicate function making it return FALSE for values where it returned TRUE and vice versa.

``````is.noncharacter <- Negate(is.character)
is.noncharacter("a")
is.noncharacter(mean)
``````

2016-08-03
2016-08-03
R Language Pedia
Icon