On Wed, Oct 3, 2012 at 7:47 AM, Hadley Wickham <h.wick...@gmail.com> wrote: >> There is: it is `function`. The parser converts your function definitions >> into a call to it. (It has 3 arguments: the formals, the body, and the >> srcref. The environment is added when it is evaluated.) >> >> So your make_function below is pretty similar (but because `function` is >> primitive, some of the evaluation rules might be different). > > Hmm, I thought I had it working, but now I can't figure out the > arguments to `function`: > >> `function`(NULL,NULL) > function () > NULL > >> `function`(alist(a = 1), NULL) > Error: invalid formal argument list for "function" > > I'm obviously missing something dumb.
I think `function` does not eval its arguments, and it demands a pairlist. So this works: f <- eval(substitute(`function`(args, body), list(args=as.pairlist(alist(a=1)), body=quote(a+1)))) The other thing to notice is a syntax difference between function and ordinary calls: when writing function(b=default, a) {} "a" is interpreted as a name rather than value; to programatically get the same effect you'd have to use alist(b=default, a= ) Peter ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel