[Bioc-devel] ExpressionSet and LumiBatch: inheritance problem in S4 methods for union class
On 05/07/2013 04:04 AM, Renaud Gaujoux wrote:
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.
I can replicate this with a simpler example, where PkgA has
setClass("A", representation(x="numeric"))
with NAMESPACE
import(methods)
exportClasses("A")
PkgB has
setClass("B", contains="A")
NAMESPACE
import(methods)
importClassesFrom("PkgA", "A")
exportClasses("B")
and then
library(PkgA); library(PkgB)
setClassUnion("C", c("matrix", "A"))
setGeneric("do", function(x) standardGeneric("do"))
setMethod("do", "C", function(x) "done")
leading to
> do(new("A"))
[1] "done"
> do(new("B"))
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ?do? for signature ?"B"?
suggesting name space issues rather than something about ExpressionSet. The
sample packages and test script are attached; it would be appropriate to pursue
this on the R-devel mailing list.
Martin
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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M1 B861 Phone: (206) 667-2793