[R] how to use "..."

R. Michael Weylandt michael.weylandt at gmail.com
Thu Jan 17 15:55:14 CET 2013


On Thu, Jan 17, 2013 at 2:36 PM, Ivan Calandra
<ivan.calandra at u-bourgogne.fr> 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)
> }
> [SNIP EXAMPLE -- THANK YOU FOR IT]
>
> 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)
>
>

Thanks for the great working examples!

It's actually not too hard here --  just pass "..." down as if it were
an argument and let summaryBy() do the hard work of actually handling
the dots:

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)
}

Also, note that as a matter of style, you can actually clean this up a
little bit: R follows the trend of many functional languages in
automatically returning the value of the last expression evaluated:

stat.group <- function(dat, vec_cat, stat_fun, ...){
    require(doBy)
    summaryBy(as.formula(paste0(".~",paste0(names(dat)[vec_cat],collapse="+"))),
data=dat, FUN=stat_fun, ...)
}

Cheers,
Michael



More information about the R-help mailing list