Yep, that works. Thanks! Want a patch? (Which you essentially just wrote?) ;-)
Much obliged, --t On Tue, Feb 26, 2013 at 2:19 PM, Hervé Pagès <hpa...@fhcrc.org> wrote: > Hi Tim, > > > On 02/26/2013 02:01 PM, Tim Triche, Jr. wrote: > >> It seems like the best way to write an email around these parts is using R >> code, so here goes. I'm just wondering why a coercion that I define for >> DataFrame -> data.frame doesn't automatically get used in practice. >> >> >> library(Biobase) >> library(GEOquery) >> library(GenomicRanges) >> >> ## download a dataset which will become a SummarizedExperiment >> ## >> gset <- getGEO("GSE41826") ## GSEMatrix seems to hose it >> if (length(gset) > 1) idx <- grep("GPL13534", attr(gset, "names")) >> else idx <- 1 ## a kludge, for dealing with SuperSeries entries >> gset <- gset[[idx]] >> sampleNames(gset) <- gset$title >> >> ## turn it into a SummarizedExperiment so I can call DMRs >> if(require(regulatoR)) >> sortedBrainCells <- as(gset, 'SummarizedExperiment') >> ## the above could maybe become a generic for GEOquery... !? >> >> ## massage some covariates >> sortedBrainCells$sex <- >> as.factor(sub('Sex: ', '', sortedBrainCells$** >> characteristics_ch1.2)) >> sortedBrainCells$race <- >> as.factor(sub('race: ', '', sortedBrainCells$** >> characteristics_ch1.3)) >> sortedBrainCells$age <- >> as.numeric(sub('age: ', '', sortedBrainCells$** >> characteristics_ch1.4)) >> >> ## now the part that is bugging me: why won't R coerce automatically? >> ## >> ## define a coercion for DataFrame to data.frame: >> setAs("DataFrame", "data.frame", function(from) as.data.frame(from)) >> ## >> ## try to assemble a model.matrix >> model.matrix(~ age + race + sex, data=colData(sortedBrainCells)**) >> ## >> ## D'OH! >> ## >> ## Error in as.data.frame.default(data, optional = TRUE) : >> ## cannot coerce class "structure("DataFrame", package = "IRanges")" to a >> data.frame >> > > What seems to be called internally is as.data.frame.default, and > of course as.data.frame.default as no idea how to convert a DataFrame > into a data.frame: > > > as.data.frame.default(**DataFrame()) > Error in as.data.frame.default(**DataFrame()) : > > cannot coerce class "structure("DataFrame", package = "IRanges")" to a > data.frame > > I think this would work if you defined an S3 as.data.frame method > for DataFrame, instead of an S4 "coerce" method from DataFrame to > data.frame. Try to define the following: > > as.data.frame.DataFrame <- selectMethod("as.data.frame", "DataFrame") > > A couple of months ago I've started to add some S3 methods to the > IRanges/GenomicRanges infrastructure. So far I only did it for > duplicated, unique, sort, levels, as.list, window, window<-. but > many are still missing (30-40 or more). as.data.frame.DataFrame is > one of them. > > Cheers, > H. > > > >> ## ok fine whatever, I'll do the coercion myself >> mat <- model.matrix(~ age + race + sex, >> data=as(colData(**sortedBrainCells),'data.frame'**)) >> >> head(mat) >> ## (Intercept) age raceAsian raceCaucasian sexMale >> ## 5175-G 1 47 0 1 1 >> ## 5175-N 1 47 0 1 1 >> ## 813-N 1 30 0 1 0 >> ## 1740-N 1 13 0 0 0 >> ## 1546-N 1 14 0 0 0 >> ## 1546-G 1 14 0 0 0 >> >> >> > -- > Hervé Pagès > > Program in Computational Biology > Division of Public Health Sciences > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N, M1-B514 > P.O. Box 19024 > Seattle, WA 98109-1024 > > E-mail: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 > -- *A model is a lie that helps you see the truth.* * * Howard Skipper<http://cancerres.aacrjournals.org/content/31/9/1173.full.pdf> [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel