[R] how to use "..."

Ivan Calandra ivan.calandra at u-bourgogne.fr
Thu Jan 17 16:42:51 CET 2013


Ok, it is that simple... Actually I had tried it but messed up so that 
it didn't work.
Do you know where I can find some documentation about it?

Regarding return(), I know that it's not necessary, but when the 
function gets more complicated, I like to have it because it becomes 
clearer to me.

Thanks all!
Ivan

--
Ivan CALANDRA
Université de Bourgogne
UMR CNRS/uB 6282 Biogéosciences
6 Boulevard Gabriel
21000 Dijon, FRANCE
+33(0)3.80.39.63.06
ivan.calandra at u-bourgogne.fr
http://biogeosciences.u-bourgogne.fr/calandra

Le 17/01/13 15:55, R. Michael Weylandt a écrit :
> 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