[R] Construct a function with argments specified by an R expression
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Sat Oct 25 12:24:48 CEST 2025
Another way to do this is to make a prototype and then modify it. For
example,
foo <- function(x, y, others) {
# the body can be anything, we won't touch it
}
args <- formals(foo)
# Make extra copies of the 3rd argument
args[3:(2 + length(argnms))] <- args[3]
# Set the names of the new ones (or use Iris's code to set all the
names, your choice)
names(args)[3:(2 + length(argnms))] <- argnms
formals(foo) <- args
Duncan Murdoch
On 2025-10-24 11:17 p.m., Rolf Turner wrote:
>
> On Fri, 24 Oct 2025 22:31:53 -0400
> Iris Simmons <ikwsimmo using gmail.com> wrote:
>
>> I would start by making a list of the desired length, where each
>> element is the missing argument:
>>
>> f <- rep(list(quote(expr = )), 2 + length(argnms))
>>
>> then add names to the list:
>>
>> names(f) <- c("x", "y", argnms)
>>
>> and then use formals<-
>>
>> formals(foo) <- f
>
> Wow! That was fast! And it seems to do exactly what I want.
>
> What I was missing, I guess, was the quote(expr = ) structure. I have
> never really understood quote(), nor expr() either. I'll just treat it
> as a black box for now.
>
>> Although, I would ask if you're certain that this is actually what
>> you want to do. It's usually a bad idea to have variable names that
>> you don't know. I'd to think it'd be better to have the default
>> argument:
>>
>> a = list()
>>
>> and supply a list of `a` values instead of several `a` arguments.
>
> Yes I understand that that would be the "sensible" approach but it
> doesn't work in the context with which I am confronted.
>
> I have more work to do before I get the approach that I've envisaged up
> and running.
>
> I may inflict more questions upon you later. (No good deed goes
> unpunished! 🙂️)
>
>
> cheers,
>
> Rolf
>
More information about the R-help
mailing list