Skip to content
Prev 27783 / 63424 Next

Aliasing a function

Thanks Tony (and others), for getting me started.  I eventually ended up with:

TopLevel$build_accessor <- function(., extra_args = c()) {
  layer <- if (.$class() %in% c("geom","stat", "position")) c(
    list(mapping=NULL,data=NULL),
    compact(list(
      geom = if (exists("default_geom", .)) .$default_geom()$objname,
      stat = if (exists("default_stat", .)) .$default_stat()$objname,
      position = if (exists("default_pos", .)) .$default_pos()$objname
    ))
  )
  params <- .$params()
  params <- params[names(params) != "..."]
  args <- c(layer, params)

  body <- ps(
    .$myName(), "$", "new(",
    if (length(args) > 0) ps(names(args),"=", names(args), collase =", "),
    if (length(extra_args) > 0) ps(names(extra_args),"=", extra_args,
collase =", "),
    "...",
    ")"
  )
  f <- function() {}
  formals(f) <- as.pairlist(c(args, alist(... =)))
  body(f) <- parse(text = body)
  environment(f) <- globalenv()
  f
}

-- obviously there are far more ggplot details in there than I had
first anticipated.

Hadley
On Mon, Feb 25, 2008 at 12:24 AM, Tony Plate <tplate at acm.org> wrote: