(Before someone else can embarrass me with the reference)

There is a variant on the c() example discussed in "Programming with 
Data", page 351, for the function max().

John

John Chambers wrote:
> It's all very well to go on about efficiency, but the purpose of 
> statistical computing is insight into data, not saving CPU cycles (to 
> paraphrase Dick Hamming).
>
> S3 methods do some things fine; other tasks need more flexibility.  One 
> should ask what's important in a particular application and try to find 
> tools that match the needs well.
>
> Now, the c() function.  This has been discussed in various forms (and 
> languages) for some time.  As I remember and as far as I know, the only 
> really general way to ensure dispatch on _any_ applicable argument is to 
> turn the computation into a pair-wise one and define the methods (NOT S3 
> methods) for the two arguments of the pairwise function.
>
> I won't try to reproduce the details off the top of my head (if I locate 
> a reference I'll pass it on), but very roughly the idea is to say 
> something like
>
> cWithMethods <- function(x, ...) {
>    if(nargs()<3)
>       cPair(x,...)
>     else
>       cPair(x, cWithMethods(...))
> }
>
> and then write methods for cPair().
>
> John
>
> Robin Hankin wrote:
>   
>> Hello everybody.
>>
>> I didn't see Franklin's first message; sorry.
>>
>> Bearing in mind Professor Ripley's comments
>> on the efficiency of S4 vs S3, I'm beginning to think I
>>   should just stick with S3 methods for my brob objects.  After
>> all, S3 was perfectly adequate for the onion package.
>>
>> Notwithstanding that,  here's my next problem.  I want to define a
>> brob method for "c".  Using the example in package "arules" as a
>> template (I couldn't see one in Matrix), I have
>>
>>
>> setClass("brob",
>>           representation = representation 
>> (x="numeric",positive="logical"),
>>           prototype      = list(x=numeric(),positive=logical())
>>           )
>>
>> "brob" <- function(x,positive){
>>    if(missing(positive)){
>>      positive <- rep(TRUE,length(x))
>>    }
>>    if(length(positive)==1){
>>      positive <- rep(positive,length(x))
>>    }
>>    new("brob",x=x,positive=positive)
>> }
>>
>> setGeneric("getX",function(x){standardGeneric("getX")})
>> setGeneric("getP",function(x){standardGeneric("getP")})
>> setMethod("getX","brob",function(x){x@x})
>> setMethod("getP","brob",function(x){x@positive})
>>
>>
>> setMethod("c",signature(x="brob"),
>>            function(x, ..., recursive=FALSE){
>>              xx <- x@x
>>              xpos <- x@positive
>>              z <- list(...)
>>              return(
>>                     brob(
>>                          c(xx,do.call("c",lapply(z,getX))),
>>                          c(xpos,do.call("c",lapply(z,getP)))
>>                          )
>>                     )
>>            }
>>            )
>>
>>
>>
>>
>> Now,  this works for something like
>>
>>  > x <- new("brob",x=pi,positive=T)
>>  > c(x,x)
>>
>> but c(1,x) isn't dispatched to my function.  How to
>> deal cleanly with this case?   Perhaps if any argument
>> to c() is a brob object, I would like to coerce them all to brobs.
>> Is this possible?
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>> Robin Hankin
>> Uncertainty Analyst
>> National Oceanography Centre, Southampton
>> European Way, Southampton SO14 3ZH, UK
>>   tel  023-8059-7743
>>
>> ______________________________________________
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>>     
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>   

	[[alternative HTML version deleted]]


