Hi, I am getting an error when calling an S4 method, which is defined for a union class that includes ExpressionSet, on a LumiBatch object:
The error prototype is as follows: - 'A' is Union of 'B' and 'C' - 'D' extends 'C' - a method myfun() exists for class 'A' => myfun('C') works but not myfun('D') Error is like: Error in (function (classes, fdef, mtable) : unable to find an inherited method for function myfun for signature "D" This works well on a toy example, but breaks when ExpressionSet are involved. So, I don't know if this is an R problem or something related to class ExpressionSet, or possibly LumiBatch (I Cc Pan Du for this reason). I remember that a while ago I was getting such errors even when defining the method for ExpressionSet and calling it on LumiBatch objects. Thank you for any help. Bests, Renaud ############################## # Toy example: ############################## R --vanilla --quiet <<EOF setClass('B', contains = 'character') setClass('C', contains = 'character') setClass('D', contains = 'C') setClassUnion('A', c('B', 'C')) setGeneric('myfun', function(x, ...) standardGeneric('myfun')) setMethod('myfun', 'A', function(x) print(class(x)) ) # works on C myfun(new('C')) # works on D try( myfun(new('D')) ) # seems that inherits does not catch the inheritance d <- new('D') is(d, 'A') inherits(d, 'A') extends(class(d), 'A') EOF ## OUTPUT FOR TOY EXAMPLE > setClass('B', contains = 'character') > setClass('C', contains = 'character') > setClass('D', contains = 'C') > setClassUnion('A', c('B', 'C')) > > setGeneric('myfun', function(x, ...) standardGeneric('myfun')) [1] "myfun" > setMethod('myfun', 'A', function(x) print(class(x)) ) [1] "myfun" > > # works on C > myfun(new('C')) [1] "C" attr(,"package") [1] ".GlobalEnv" > > # works on D > try( myfun(new('D')) ) [1] "D" attr(,"package") [1] ".GlobalEnv" > > # seems that inherits does not catch the inheritance > d <- new('D') > is(d, 'A') [1] TRUE > inherits(d, 'A') [1] TRUE > extends(class(d), 'A') [1] TRUE > ##################################################### # Concrete example with ExpressionSet and LumiBatch objects: ##################################################### ### RUN R --vanilla <<EOF library(Biobase) setGeneric('myfun', function(x, ...) standardGeneric('myfun')) setClassUnion('A', c('matrix', 'ExpressionSet')) setMethod('myfun', 'A', function(x){ print(class(x)) }) # works on ExpressionSet data(sample.ExpressionSet) myfun(sample.ExpressionSet) # not working on LumiBatch library(lumi) data(example.lumi) try( myfun(example.lumi) ) # seems that inherits does not catch the inheritance is(example.lumi, 'A') inherits(example.lumi, 'A') extends(class(example.lumi), 'A') # define method for ExpressionSet ? setMethod('myfun', 'ExpressionSet', function(x){ message('ExpressionSet method') print(class(x)) }) # works well myfun(sample.ExpressionSet) myfun(example.lumi) # Session info sessionInfo() EOF ################## #### OUTPUT FOR EXPRESSIONSET ################## R version 3.0.0 (2013-04-03) -- "Masked Marvel" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: i686-pc-linux-gnu (32-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(Biobase) Loading required package: BiocGenerics Loading required package: parallel Attaching package: BiocGenerics The following objects are masked from package:parallel: clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply, parCapply, parLapply, parLapplyLB, parRapply, parSapply, parSapplyLB The following object is masked from package:stats: xtabs The following objects are masked from package:base: anyDuplicated, as.data.frame, cbind, colnames, duplicated, eval, Filter, Find, get, intersect, lapply, Map, mapply, match, mget, order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rep.int, rownames, sapply, setdiff, sort, table, tapply, union, unique, unlist Welcome to Bioconductor Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see 'citation("Biobase")', and for packages 'citation("pkgname")'. > setGeneric('myfun', function(x, ...) standardGeneric('myfun')) [1] "myfun" > setClassUnion('A', c('matrix', 'ExpressionSet')) > setMethod('myfun', 'A', function(x){ + print(class(x)) + }) [1] "myfun" > > # works on ExpressionSet > data(sample.ExpressionSet) > myfun(sample.ExpressionSet) [1] "ExpressionSet" attr(,"package") [1] "Biobase" > > # not working on LumiBatch > library(lumi) KernSmooth 2.23 loaded Copyright M. P. Wand 1997-2009 Warning messages: 1: replacing previous import image when loading graphics 2: replacing previous import nleqslv when loading nleqslv > data(example.lumi) > try( myfun(example.lumi) ) Error in (function (classes, fdef, mtable) : unable to find an inherited method for function myfun for signature "LumiBatch" > > # seems that inherits does not catch the inheritance > is(example.lumi, 'A') [1] TRUE > inherits(example.lumi, 'A') [1] FALSE > extends(class(example.lumi), 'A') [1] TRUE > > # define method for ExpressionSet ? > setMethod('myfun', 'ExpressionSet', function(x){ + message('ExpressionSet method') + print(class(x)) + }) [1] "myfun" > > # works well > myfun(sample.ExpressionSet) ExpressionSet method [1] "ExpressionSet" attr(,"package") [1] "Biobase" > myfun(example.lumi) ExpressionSet method [1] "LumiBatch" attr(,"package") [1] "lumi" > > # Session info > sessionInfo() R version 3.0.0 (2013-04-03) Platform: i686-pc-linux-gnu (32-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] lumi_2.12.0 Biobase_2.20.0 BiocGenerics_0.6.0 loaded via a namespace (and not attached): [1] affy_1.38.1 affyio_1.28.0 annotate_1.38.0 [4] AnnotationDbi_1.22.5 beanplot_1.1 BiocInstaller_1.10.1 [7] Biostrings_2.28.0 colorspace_1.2-2 DBI_0.2-6 [10] GenomicRanges_1.12.2 grid_3.0.0 illuminaio_0.2.0 [13] IRanges_1.18.0 KernSmooth_2.23-10 lattice_0.20-15 [16] limma_3.16.3 MASS_7.3-26 Matrix_1.0-12 [19] matrixStats_0.8.1 mclust_4.1 methylumi_2.6.1 [22] mgcv_1.7-22 minfi_1.6.0 multtest_2.16.0 [25] nleqslv_2.0 nlme_3.1-109 nor1mix_1.1-4 [28] preprocessCore_1.22.0 RColorBrewer_1.0-5 reshape_0.8.4 [31] R.methodsS3_1.4.2 RSQLite_0.11.3 siggenes_1.34.0 [34] splines_3.0.0 stats4_3.0.0 survival_2.37-4 [37] tools_3.0.0 XML_3.96-1.1 xtable_1.7-1 [40] zlibbioc_1.6.0 [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel