# Section 5 Functions

So far, we’ve used a few built-in tools like `mean()`

- if you’re
coming from a language like SPSS you might think of these tools as “commands,”
but in R we call them **functions**. Functions are basically reusable chunks of
code, that take a certain set of inputs (also called **arguments**) and either
produce an output (a **return value**), or just do a task like showing a plot.
When you plug a specific set of inputs into the function and “run” it, we say
that you’re **calling** the function.

The `mean()`

function in R can take a vector of numbers as an input,
and return a single number as an output:

`mean(data$extraversion)`

`## [1] 12.37298`

`sd(data$extraversion)`

`## [1] 3.893686`

You can also look at means by group using the describeBy function from the psych package. In this example we look at means (and other descriptives) by treatment group.

`describeBy(data$extraversion, data$treatment)`

```
##
## Descriptive statistics by group
## group: 1
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 329 12.46 3.87 13 12.5 4.45 4 21 17 -0.12 -0.62 0.21
## ------------------------------------------------------------------------------------------
## group: 2
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 710 12.29 3.8 12 12.33 4.45 2 22 20 -0.1 -0.24 0.14
## ------------------------------------------------------------------------------------------
## group: 3
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 382 12.46 4.1 13 12.58 4.45 2 23 21 -0.25 -0.34 0.21
```

## 5.1 Arguments

The arguments of a function are the set of inputs it accepts. Some of the inputs will be used to calculate the output, while some might be different options that affect how the calculation happens.

If we look at the arguments for the default `mean()`

function in R,
accessed by entering `?mean`

in the console, we see:

`mean(x, trim = 0, na.rm = FALSE, ...)`

Since the first argument `x`

appears on its own, it’s a **mandatory** argument.
You have to provide a value for `x`

, otherwise you get an error:

```
mean()
## Error in mean.default() : argument "x" is missing, with no default
```

Arguments like `trim = 0`

are **optional** when you’re calling the function:
the value after the `=`

is the **default value** that will be used if you don’t
supply one. The default values tell you what types of input
that argument accepts (numeric, logical, character, etc.), but it’s also good
to read the information on the function’s help page for more detail:

*trim = the fraction (0 to 0.5) of observations to be trimmed from each end of x before the mean is computed. Values of trim outside that range are taken as the nearest endpoint.*

`mean(data$personality_total)`

`## [1] 23.78536`

```
# This is the same as above, since this is already the default
mean(data$personality_total, trim = 0)
```

`## [1] 23.78536`

```
# A different setting from the default
mean(data$personality_total, trim = 0.1)
```

`## [1] 23.87775`