[R] cbind for list of zoo objects

Harry Mamaysky h.mamaysky at gmail.com
Tue Apr 9 15:15:25 CEST 2013


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.ulrich at gmail.com> wrote:

On Tue, Apr 9, 2013 at 7:31 AM, Harry Mamaysky <h.mamaysky at 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 <ggrothendieck at gmail.com> wrote:
> 
> On Mon, Apr 8, 2013 at 3:54 PM, Harry Mamaysky <h.mamaysky at 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



More information about the R-help mailing list