I came across this code in library.R package <- as.character(substitute(package)) where package is the first argument to the "library" function. I've been racking my brains to understand why this is not just an elaborate (and ineffcient) way to write: package <- "package" E.g. > package <- as.character(substitute(package)) > package [1] "package" > Thanks Mick Jordan
On Jul 21, 2014, at 10:07 AM, Mick Jordan <mick.jordan at oracle.com> wrote:> I came across this code in library.R > > package <- as.character(substitute(package)) > > where package is the first argument to the "library" function. > > I've been racking my brains to understand why this is not just an elaborate (and ineffcient) way to write: > > package <- "package" > > E.g. > > > package <- as.character(substitute(package)) > > package > [1] "package" > > > > Thanks > Mick JordanFrequently used in a function body, where the function author wants the argument to be passed as an object name, rather than a character vector, or perhaps both, as is the case with library() and require(). For example: test <- function(x) {as.character(substitute(x))} # Quoted, passing "MyPackage" as a character vector> test("MyPackage")[1] "MyPackage" # Not quoted, passing the object MyPackage> test(MyPackage)[1] "MyPackage" In both cases, the argument passed as 'x' can then be used within the function as a character vector, rather than as the object itself. Regards, Marc Schwartz
subsitute(expr), with only one argument, is only useful inside of a function and then only when the expression, expr, involves an argument to the function. Then the unevaluated actual arguments to the function are substituted into the [unevaluated] expression. E.g., f <- function(x, y=stop("y is required"), z=log(-1)) { substitute(y + z) } f(1) # stop("y is required") + log(-1) f(1,sqrt(-1),log(1:10)) # sqrt(-1) + log(1:10) Bill Dunlap TIBCO Software wdunlap tibco.com On Mon, Jul 21, 2014 at 8:07 AM, Mick Jordan <mick.jordan at oracle.com> wrote:> I came across this code in library.R > > package <- as.character(substitute(package)) > > where package is the first argument to the "library" function. > > I've been racking my brains to understand why this is not just an elaborate > (and ineffcient) way to write: > > package <- "package" > > E.g. > >> package <- as.character(substitute(package)) >> package > [1] "package" >> > > Thanks > Mick Jordan > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel