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 <pbu...@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! >> >> >> Thank you in advance for your help! >> Ivan >> > > -- > Patrick Burns > pbu...@pburns.seanet.com > twitter: @burnsstat @portfolioprobe > http://www.portfolioprobe.com/blog > http://www.burns-stat.com > (home of: > 'Impatient R' > 'The R Inferno' > 'Tao Te Programming') > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.