Re: Construct a function with argments specified by an R expression

Peter Dalgaard <[email protected]>
Newsgroups gmane.comp.lang.r.general
Message-ID <[email protected]>
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 <[email protected]> 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
> <[email protected]> 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 <[email protected]> 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
>>> 
>>> ______________________________________________
>>> [email protected] 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
> 
> ______________________________________________
> [email protected] 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: [email protected]  Priv: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.