This constructs a new function given it's three components: list of arguments, body code and parent environment.
new_function(args, body, env = caller_env())
A named list of default arguments. Note that if you
want arguments that don't have defaults, you'll need to use the
special function alist, e.g.
A language object representing the code inside the
function. Usually this will be most easily generated with
The parent environment of the function, defaults to the
calling environment of
f <- function(x) x + 3 g <- new_function(alist(x = ), quote(x + 3)) # The components of the functions are identical identical(formals(f), formals(g))#>  TRUEidentical(body(f), body(g))#>  TRUEidentical(environment(f), environment(g))#>  TRUE# But the functions are not identical because f has src code reference identical(f, g)#>  TRUEattr(f, "srcref") <- NULL # Now they are: stopifnot(identical(f, g))