[R] Construct a function with argments specified by an R expression

Peter Dalgaard pd@|gd @end|ng |rom gm@||@com
Tue Oct 28 11:37:21 CET 2025


This is kind of fun, although it gets a bit far into the realm of obfuscation…

It also seems to work to do

> arg_names <- c("x", "y", paste0("a", 1:3), paste0("b", 1:3))
> f <- function()"hello"
> formals(f) <- sapply(arg_names,\(.)unname(alist(x=)))
> f
function (x, y, a1, a2, a3, b1, b2, b3)  “hello”

- pd


> On 26 Oct 2025, at 15.47, Gabor Grothendieck <ggrothendieck using gmail.com> wrote:
> 
> This can be simplified slightly to
> 
>  # inputs
>  arg_names <- c("x", "y", paste0("a", 1:3), paste0("b", 1:3))
>  f <- function() {}
> 
>  arg <- alist(x = )
>  formals(f) <- setNames(rep(arg, length(arg_names)), arg_names)
>  f
> 
>  ## function (x, y, a1, a2, a3, b1, b2, b3)
>  ## {
>  ## }
> 
> On Sun, Oct 26, 2025 at 10:41 AM Gabor Grothendieck
> <ggrothendieck using gmail.com> wrote:
>> 
>> Define the names and a prototype and then use formals(f) <- ... as shown.
>> 
>>  # inputs
>>  arg_names <- c("x", "y", paste0("a", 1:3), paste0("b", 1:3))
>>  f <- function() {}
>> 
>>  arg <- alist(x = )
>>  formals(f) <- setNames(c(arg, rep(arg, length(arg_names)-1)), arg_names)
>>  f
>> 
>> giving
>> 
>>  function (x, y, a1, a2, a3, b1, b2, b3)
>>  {
>>  }
>> 
>> On Fri, Oct 24, 2025 at 10:23 PM Rolf Turner <rolfturner using posteo.net> wrote:
>>> 
>>> 
>>> I want to build a function (say "buildFn") to *return* a function of the
>>> form
>>> 
>>>    foo(x,y,a1, ... an, b1, ..., bn)
>>> 
>>> where the arguments ai and bi are given in the form of a list created
>>> in R.  E.g. I'd like to be able to say
>>> 
>>>     argnms <- c(paste0("a",1:3),paste0("b",1:3"))
>>>     foo <- buildFn(argnms)
>>> 
>>> with the resulting "foo" having arguments x, y, a1, a2, a3, b1, b2, b3.
>>> 
>>> I thought I might be able to do this using "formals<-" but I cannot get
>>> this to work.  i could provide more detail of what I've tried, but it's
>>> probably not worth it.
>>> 
>>> Can anyone steer me in the right direction?  Thanks.
>>> 
>>> cheers,
>>> 
>>> Rolf Turner
>>> 
>>> --
>>> Honorary Research Fellow
>>> Department of Statistics
>>> University of Auckland
>>> Stats. Dep't. (secretaries) phone:
>>>         +64-9-373-7599 ext. 89622
>>> Home phone: +64-9-480-4619
>>> 
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>> 
>> 
>> 
>> --
>> Statistics & Software Consulting
>> GKX Group, GKX Associates Inc.
>> tel: 1-877-GKX-GROUP
>> email: ggrothendieck at gmail.com
> 
> 
> 
> -- 
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.


-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business SchoolSolbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-help mailing list