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 <[email protected]> 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


______________________________________________
[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.

Reply via email to