[R] how to use "..."

Bert Gunter gunter.berton at gene.com
Wed Jan 30 18:44:55 CET 2013

```Because R can be interactive, I find that a little exploring through
the use of strategically placed browser() calls (?browser if you are
unfamiliar with this handy debugging tool) is often the fastest way to
solve little R puzzles like this.

For example, try this (in an R GUI):

f2 <- function(y,...){ browser(); list(...) }
f1 <- function(x,...){ browser(); f2(x,...) }

Now at the command line:

>f1( x=1, z= 2:4)
## In the f1 browser  do ls() to see what's in the f1 environment
## and then do list(...) to see what's in the dots argument
## then issue the browser command  c  to continue
## and do the same in the f2 browser .

## then try:
> f1( x=1, y= 2:4)  ## and
> f1( 2:4)
> f1( y=2:4) ## this will produce an error in f2

I think this help give you a better idea of what's going on (or
totally confuse?!).

-- Bert

On Wed, Jan 30, 2013 at 8:15 AM, Patrick Burns <pburns at pburns.seanet.com> wrote:
> There is now a blog post that attempts to
> answer the question in the subject line:
>
> http://www.burns-stat.com/the-three-dots-construct-in-r/
>
> Pat
>
> On 17/01/2013 14:36, Ivan Calandra wrote:
>>
>> Dear users,
>>
>> I'm trying to learn how to use the "...".
>>
>> I have written a function (simplified here) that uses doBy::summaryBy():
>> # 'dat' is a data.frame from which the aggregation is computed
>> # 'vec_cat' is a integer vector defining which columns of the data.frame
>> should be use on the right side of the formula
>> # 'stat_fun' is the function that will be run to aggregate
>> stat.group <- function(dat, vec_cat, stat_fun){
>>      require(doBy)
>>      df <-
>>
>> summaryBy(as.formula(paste0(".~",paste0(names(dat)[vec_cat],collapse="+"))),
>> data=dat, FUN=stat_fun)
>>      return(df)
>> }
>>
>> Example, works fine:
>> my_data <- structure(list(cat = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L,
>> 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"), varnum =
>> c(-0.754816565434373,
>> -1.94101630973709, -0.102461836059522, -0.519952759645808,
>> -1.73772800855664,
>> -1.13939178585609, 0.522356715260142, -0.701428514907824,
>> 1.45197576541159,
>> 0.0844567413828095)), .Names = c("cat", "varnum"), row.names = c(NA,
>> -10L), class = "data.frame")
>> stat.group(dat=my_data, vec_cat=1, stat_fun=mean)
>>
>>
>> Now summaryBy() has an "..." argument and I would like to use it.
>> For example, I would like to be able to add the trim argument to my call
>> like this:
>> stat.group(dat=my_data, vec_cat=1, stat_fun=mean, trim=0.2)
>>
>>
>> I know I can do it using this "..." but I have no idea how to do it.
>> I've tried to search for it, but a search with "..." doesn't yield
>> interesting results!
>>
>>
>> Ivan
>>
>
> --
> Patrick Burns
> pburns at pburns.seanet.com
> http://www.portfolioprobe.com/blog
> http://www.burns-stat.com
> (home of:
>  'Impatient R'
>  'The R Inferno'
>  'Tao Te Programming')
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

--

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website: