[R] Function returning multiple objects but printing only one
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Jul 14 13:17:53 CEST 2015
On 13/07/2015 5:06 PM, Daniel Caro wrote:
> Hello,
>
> Sorry if this has already been addressed before but I could not find any
> helpful references.
>
> I would like to create a function that outputs a single element of a list
> but stores all elements, similar to 'lm' and many other functions. There
> are several answers on how to return multiple objects with lists, for
> example:
>
> http://r.789695.n4.nabble.com/How-to-return-multiple-values-in-a-function-td858528.html
>
> http://stackoverflow.com/questions/8936099/returning-multiple-objects-in-an-r-function
>
> But the examples show how to print multiple outputs, such as
>
> functionReturningTwoValues <- function() {return(list(first=1, second=2))}
> functionReturningTwoValues()
>
> And I only want the function to print a single element from the list but
> still store the other elements such that they can be retrieved with
> functionReturningTwoValues$first, for example. My function produces
> bootstrap coefficients so clearly I don't want to print the bootstrap
> output but I do want users to be able to access it.
You need to give your object a class, and define a print method for that
class. It's pretty simple:
functionReturningTwoValues <- function() {return(structure(list(first=1,
second=2), class="MyClass"))}
print.MyClass <- function(x, ...) {
print(x$first, ...)
}
This is using "S3 classes". There are other systems (S4, etc.) that let
you do this, but none are simpler.
Duncan Murdoch
More information about the R-help
mailing list