After some more digging (grep "alist" R-devel/ ), I've come up with this,
tools:::as.alist.symbol("x") sugar = function(fun, id = "id"){ ff <- formals(fun) if( id %in% names(ff)) stop(paste(id, "is part of args(fun)")) new.arg <- tools:::as.alist.symbol(id) formals(fun) <- c(unlist(ff), new.arg) fun } foo = function(x, a=1){ x } sugar(foo) sugar(foo, 'a') sugar(sugar(foo)) sugar(foo, 'my.new.arg') Best, baptiste 2009/10/1 baptiste auguie <baptiste.aug...@googlemail.com>: > Dear list, > > I have the following function, > > sugar = function(fun, id = "id"){ > ff <- formals(fun) > if( id %in% names(ff)) > stop("id is part of args(fun)") > formals(fun) <- c(unlist(ff), alist(id=)) > fun > } > > which one may use on a function foo, > > foo = function(x){ > x > } > > sugar(foo) # results in the extended closure, > > function (x, id) > { > x > } > > Its limitation (other than not working with .Primitives) is the 'id' > tag that I add in the formals of fun(). I don't know how to create a > alist(id=) pairlist where id can be changed. I tried the usual bquote > and substitute approach but they don't seem to work here. I suppose I > could do something like, > > parse(text = paste("alist(",id, "=)", sep="")) > > but this is usually not recommended. > > Any ideas? > > Best regards, > > baptiste > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.