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.