Skip to content

Checking for and adding "..." arguments to a function...

4 messages · Jonathan Greenberg, Rui Barradas, David Winsemius +1 more

#
R-helpers:

I'm guessing this is an easy one for some of you, but I'm a bit
stumped.  Given some arbitrary function (doesn't matter what it does):

myfunction <- function(a,b,c)
{
return(a+b+c)
}

I want to test this function for the presence of the ellipses ("...")
and, if they are missing, create a new function that has them:

myfunction <- function(a,b,c,...)
{
return(a+b+c)
}

So, 1) how do I test for whether a function has an ellipses argument
and, 2) how do I "append" the ellipses to the argument list if they do
exist?

Note that the test/modification should be done without invoking the
function, e.g. I'm not asking how to test for this WITHIN the
function, I'm asking how to test "myfunction" directly as an R object.

Thanks!

--j
#
Hello,

Use ?formals.

 > formals(myfunction)
$a


$b


$c


$...


Hope this helps,

Rui Barradas

Em 17-02-2014 21:22, Jonathan Greenberg escreveu:
#
On Feb 17, 2014, at 1:22 PM, Jonathan Greenberg wrote:

            
One way:
+ {
+ return(a+b+c)
+ }
$a


$b


$c


$...
[1] 1
+ {
+ return(a+b+c)
+ }
[1] 0
Not exactly sure but the usual way to capture the objects passed in the three dots mechanism is with list(...)
+ { others <- list(...); for(i in others) {cat(i);cat("\n")}
+ return(a+b+c)
+ }
4
5
[1] 6
David Winsemius
Alameda, CA, USA
#
Here are two ways:

## construct formals adding ...
f <- c(formals(myfunction), unlist(alist(... = )))
## replace the formals, excluding the extra ... if it previously existed
formals(myfunction) <- f[!duplicated(names(f))]


## 2nd way, searching for ... and doing the replacement only if it is not found
if(!any(grepl("...", names(formals(myfunction))))) {
    formals(myfunction) <- c(formals(myfunction), unlist(alist(... = )))
}

HTH,
Ista
On Mon, Feb 17, 2014 at 4:22 PM, Jonathan Greenberg <jgrn at illinois.edu> wrote: