[Rd] Creating functions programmatically

From: Hadley Wickham <h.wickham_at_gmail.com>
Date: Wed, 03 Oct 2012 09:16:48 -0500


Hi all,

A function has three components: arguments, body and environment. Is there no base function that allows us to create a function from those three components?

The best I could come up with is:

make_function <- function(args, body, env = parent.frame()) {   args <- as.pairlist(args)
  stopifnot(is.language(body))
  f <- eval(call("function", args, body))   environment(f) <- env
  f
}
mquote <- function(...) as.list(substitute(list(...))[-1])

add <- make_function(mquote(a = 1, b = a), quote(a + b)) add(1)
add(1, 2)

add2 <- make_function(mquote(a = 1, b = a), quote(a + b + d)) d <- 3
add2(1)

Am I missing a built in way to do this? Also, is there a built in equivalent to my mquote (= multiquote, for producing a named list of quoted inputs)?

Thanks!

Hadley

-- 
RStudio / Rice University
http://had.co.nz/

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Wed 03 Oct 2012 - 14:21:19 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 03 Oct 2012 - 14:40:44 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive