# R - Function

Functions are stored as R objects with the class function

Functions can be:

• used as arguments of other functions
• nested

## Syntax

``````function( arglist ) expr
return(value)

#of

f <- function(arglist) {
## Body
}```
```

where:

• arglist is a list of argument including the three dot argument.

Ex: arg1, arg2 = 1, arg3 = 'Nico', arg4 = NULL, …

## Argument

### Arguments mapping

Arguments can be matched positionally or by name.

Arguments mappings works as follow:

• an exact match on the name occurs. The matched argument are removed from the argument list.
• a partial match on the name occurs. The matched argument are removed from the argument list.
• a positional match occurs on the position (the remaining unnamed arguments taking their position number from the remaining argument list)

All the below function calls are equivalent:

``````mean(x=data,na.rm=FALSE)
mean(na.rm=FALSE,x=data)
mean(data,na.rm=FALSE)
mean(na.rm=FALSE,data)```
```

### Args Function

To get the arguments of a function you can use the args function:

````args(data.frame)`
```
``````function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors())
NULL
```
```

### Lazy evaluation

Arguments to functions are evaluated lazily (ie only when needed).

• Argument is not used in the function
``````f = function(x, y) {
return(x*2)
}
f(2)```
```
``````[1] 4
```
```
• Argument is not called
``````f = function(x, y) {
print(x)
print(y)
}
f(2)```
```
``````[1] 2
Error in print(y) : argument "y" is missing, with no default
```
```

Notice that the error occurs only when the y argument is needed (ie interpreted)

### The … argument

The … argument indicates a variable number of arguments.

This special argument is used :

• when extending (wrapping) an existing function
``````myPlot = function(x, y, type = "l", ...) {
plot(x, y, type = type, ...)
}```
```
• when the number of arguments cannot be known in advance.
• by generic functions

Any arguments that appear after it must be named explicitly and cannot be partially matched.

## Return Value

The return value of a function is:

• returned by the return function
• of by the last expression in the body function to be evaluated.
``````f = function(x, y) {
return(x*2)
}```
```

is equivalent to:

``````f = function(x, y) {
x*2
}```
```

is equivalent to:

``````f = function(x, y) {
return(x*2)
x*4 # This statement will be skipped
}```
```

## Environment

Typically, a function is defined in the global environment, so that the values of free variables are just found in the user’s workspace

In this case the environment in which a function is defined is the body of another function! ????

## How to

### Get help on function

Just use the question mark ? to obtain the documentation on a function

````?data.frame`
```

### Get the parameters of a function

Use the str function

Example:

``````str(vector)
function (mode = "logical", length = 0L)  ```
```

where:

• function indicates that vector is a function
• (mode = “logical”, length = 0L) are the parameters of the function.

### Get the code of the function

Just type the function:

Example with the function ddply from plyr

``````library(plyr)
> ddply
function (.data, .variables, .fun = NULL, ..., .progress = "none",
.inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)
{
if (empty(.data))
return(.data)
.variables <- as.quoted(.variables)
pieces <- splitter_d(.data, .variables, drop = .drop)
ldply(.data = pieces, .fun = .fun, ..., .progress = .progress,
.inform = .inform, .parallel = .parallel, .paropts = .paropts)
}
<environment: namespace:plyr>```
```

where:

## Support

### Error: could not find function

To avoid the below message (function)

``````Error: could not find function "...."
```
```

load the package that contains the function

````require(myPackage)`
```

with R - Require or R - Library

Discover More
ORE - Install 1.3.1

grant rqrole to grant execute on rqsys.rqGroupEvalImpl for each user. Create all the synonyms listed in rquser.sql for each user. startup scriptfunctions ore.attach(USER, SID, host, password) establishes...
R - Class

A class is just an attribute of an object. You can remove the attribute with the function . The class with then become the type A list can have different class. unclass returns (a copy of) its...
R - Density

The density function This function computes kernel density estimates. The algorithm used in density.default disperses the mass of the empirical distribution function over a regular grid of at least 512...
R - File System (File, Directory)

in R See also: system.file {base} to finds the full file names of files in packages etc. To get the working directory, use the function getwd To set the working directory, use the function...
R - Function

Functions are stored as R objects with the class function Functions can be: used as arguments of other functions nested where: arglist is a list of argument including the three dot argument....
R - K-fold cross-validation (with Leave-one-out)

Cross-validation in R. Leave-one-out cross-validation in R. Each time, Leave-one-out cross-validation (LOOV) leaves out one observation, produces a fit on all the other data, and then makes a...