One reference to a very similar problem is help(cbind2), about the cbind2() and rbind2() functions which I had added to R a little while ago exactly for the same reason as we talk about 'c()' or "c" here, and thanks to original "hand holding" by you, John.
Martin >>>>> "JMC" == John Chambers <[EMAIL PROTECTED]> >>>>> on Tue, 05 Sep 2006 11:28:12 -0400 writes: JMC> It's all very well to go on about efficiency, but the purpose of JMC> statistical computing is insight into data, not saving CPU cycles (to JMC> paraphrase Dick Hamming). JMC> S3 methods do some things fine; other tasks need more flexibility. One JMC> should ask what's important in a particular application and try to find JMC> tools that match the needs well. JMC> Now, the c() function. This has been discussed in various forms (and JMC> languages) for some time. As I remember and as far as I know, the only JMC> really general way to ensure dispatch on _any_ applicable argument is to JMC> turn the computation into a pair-wise one and define the methods (NOT S3 JMC> methods) for the two arguments of the pairwise function. JMC> I won't try to reproduce the details off the top of my head (if I locate JMC> a reference I'll pass it on), but very roughly the idea is to say JMC> something like JMC> cWithMethods <- function(x, ...) { JMC> if(nargs()<3) JMC> cPair(x,...) JMC> else JMC> cPair(x, cWithMethods(...)) JMC> } JMC> and then write methods for cPair(). JMC> John JMC> 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)[EMAIL PROTECTED]) >> setMethod("getP","brob",function(x)[EMAIL PROTECTED]) >> >> >> setMethod("c",signature(x="brob"), >> function(x, ..., recursive=FALSE){ >> xx <- [EMAIL PROTECTED] >> xpos <- [EMAIL PROTECTED] >> 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 >> >> JMC> ______________________________________________ JMC> R-devel@r-project.org mailing list JMC> https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel