I'm creating a custom function in R that takes as input a few different variables and creates a data.frame, a plot, and some summary stats, all stored in a list. I'd like to only print out the summary stats when calling the function, but have the plot and data.frame available when called explicitly.
I think what I want is similar to how lm() operates but I'm not sure how it is acheiving that. 
When I print the object returned by lm I only get a printout of $call and $coefficients:
lm(mtcars$mpg ~ mtcars$cyl)
Call:
lm(formula = mtcars$mpg ~ mtcars$cyl)
Coefficients:
(Intercept)   mtcars$cyl  
     37.885       -2.876  
But clearly behind the scenes there is much more available in the function call to lm. 
lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3])$residuals
            1             2             3 
-1.280530e-15  1.280530e-15  8.365277e-31 
> unclass(lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3])
Call:
lm(formula = mtcars$mpg[1:3] ~ mtcars$cyl[1:3])
Coefficients:
    (Intercept)  mtcars$cyl[1:3]  
           26.4             -0.9  
> unclass(lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3]))
$coefficients
    (Intercept) mtcars$cyl[1:3] 
           26.4            -0.9 
$residuals
            1             2             3 
-1.280530e-15  1.280530e-15  8.365277e-31 
$effects
    (Intercept) mtcars$cyl[1:3]                 
  -3.741230e+01    1.469694e+00    1.810943e-15 
....
$call
lm(formula = mtcars$mpg[1:3] ~ mtcars$cyl[1:3])
$model
  mtcars$mpg[1:3] mtcars$cyl[1:3]
1            21.0               6
2            21.0               6
3            22.8               4
I looked at the code for lm but it's not very clear to me what is going on.
 
     
    