Returning Values from a Function

Often you want a function to return a single value (like a mean or a maximum), in which case you simply leave the last line of the function unassigned (i.e. there is no ‘gets arrow’ on the last line). Here is a function to return the median value of the parallel maxima (built-in function pmax) of two vectors supplied as arguments:

parmax<-function (a,b) {
c<-pmax(a,b)
median(c) }

Here is the function in action: the unassigned last line median(c) returns the answer

x<-c(1,9,2,8,3,7)
y<-c(9,2,8,3,7,2)
parmax(x,y)

[1] 8

If you want to return two or more variables from a function you should use return with a list containing the variables to be returned. Suppose we wanted the median value of both the parallel maxima and the parallel minima to be returned:

parboth<-function (a,b) {
c<-pmax(a,b)
d<-pmin(a,b)
answer<-list(median(c),median(d))
names(answer)[[1]]<-"median of the parallel maxima"
names(answer)[[2]]<-"median of the parallel minima"
return(answer) }

Here it is in action with the same x and y data as above:

parboth(x,y)

$"median of the parallel maxima"
[1] 8

$"median of the parallel minima"
[1] 2

The point is that you make the multiple returns into a list, then return the list. The provision of multi-argument returns (e.g. return(median(c),median(d)) in the example above) has been deprecated in R and a warning is given, as multi-argument returns were never documented in S, and whether or not the list was named differs from one version ...

Get The R Book now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.