That's true. So perhaps there should be a flag that turns on this error checking. Often "args" is just a list that gets generated automatically and you don't know what all of its elements are. It just leads to a bit of non-deterministic behavior. It would be useful to have the option of flagging when one of those list elements (inadvertently) has the same name as an argument of "what".
Sent from my iPhone On Apr 9, 2013, at 9:07 AM, Joshua Ulrich <josh.m.ulr...@gmail.com> wrote: On Tue, Apr 9, 2013 at 7:31 AM, Harry Mamaysky <h.mamay...@gmail.com> wrote: > Thanks for the explanations. > > Wouldn't the following bit of checking in do.call() make it easier to figure > such things out in the future? Sure, it would have helped you figure out your issue, but you don't want a *warning* when you purposefully try to set named function arguments. I.e., what if you want to set a function argument to something other than its default value? Do you really want a warning when you do that? > > my.call <- function(what,args,...) { > > ## Get the name of the function to call. > if (!is.character(what)) > whatStr <- deparse(substitute(what)) > else > whatStr <- what > > callFctn <- paste0(gsub(paste0('.',class(args[[1]])),'',whatStr), '.', > class(args[[1]])) > > ## Check whether list names are arguments to the function. > if ( any( names(args) %in% names(formals(callFctn)) ) ) > warning( 'Element of "args" is also an argument for ', callFctn, '.' ) > > ## Do the actual call. > do.call( what, args, ... ) > } > > Sent from my iPhone > > On Apr 8, 2013, at 7:23 PM, Gabor Grothendieck <ggrothendi...@gmail.com> > wrote: > > On Mon, Apr 8, 2013 at 3:54 PM, Harry Mamaysky <h.mamay...@gmail.com> wrote: >> Can someone explain why this happens when one of the list elements is named >> 'all'? >> >>> zz <- list( zoo(1:10,1:10), zoo(101:110,1:10), zoo(201:210,1:10) ) >>> names(zz)<-c('test','bar','foo') >>> do.call(cbind,zz) >> test bar foo >> 1 1 101 201 >> 2 2 102 202 >> 3 3 103 203 >> 4 4 104 204 >> 5 5 105 205 >> 6 6 106 206 >> 7 7 107 207 >> 8 8 108 208 >> 9 9 109 209 >> 10 10 110 210 >>> names(zz)<-c('test','all','foo') >>> do.call(cbind,zz) >> test foo >> 1 1 201 >> 2 2 202 >> 3 3 203 >> 4 4 204 >> 5 5 205 >> 6 6 206 >> 7 7 207 >> 8 8 208 >> 9 9 209 >> 10 10 210 > > all= is an argument to cbind.zoo so it cannot be used as a column name. > >> args(zoo:::cbind.zoo) > function (..., all = TRUE, fill = NA, suffixes = NULL, drop = FALSE) > NULL > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com -- Joshua Ulrich | about.me/joshuaulrich FOSS Trading | www.fosstrading.com R/Finance 2013: Applied Finance with R | www.RinFinance.com ______________________________________________ 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.