It surprises me that lazy() gives the name of an object if the object is in a [lazyloaded] package but the object itself if I've defined it locally. I think that users should not have to be concerned with such a distinction.
lazy(mean)
expr: mean
env: <environment: R_GlobalEnv>
myMean <- function(vector) base::mean(vector, na.rm=TRUE)
lazy(myMean)
expr: function (vector) ...
env: <environment: R_GlobalEnv>
lazy(mtcars)
expr: mtcars
env: <environment: R_GlobalEnv>
mtcars$guzzles <- mtcars$mpg < 25
lazy(mtcars)
expr: structure(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, ...
env: <environment: R_GlobalEnv>
packageVersion("lazyeval") # downloaded from github.com/hadley/lazyeval, 2016-07-08
[1] '0.2.0.9000'