[BioC] implement a additional slot to the eSet class (Formar: Error in .local(.Object, ...) : could not find function "checkClass")
Kasper Daniel Hansen
khansen at stat.berkeley.edu
Wed Dec 9 16:53:08 CET 2009
You might want to detail the dimensions and type of this additional slot. My guess - based on the name -- is that this can easily be carried out within the eSet stuff.
Kasper
On Dec 9, 2009, at 9:42 AM, <Ext-Elmar.Bucher at vtt.fi> <Ext-Elmar.Bucher at vtt.fi> wrote:
> Hi Martin,
>
> Thank you for the prompt "not exported function" hint. It was what I want to do :).
> To your question: " What specifically do you want to accomplish? "
> I like to implement a additional slot to the eSet class. So it differs from the code you suggested to study. I list here the essential of the code I have written till now. The code is not working as I wished. The main problem is, that the additional slot (leukoData) shows the correct values inside the initialize-routine (observer by browser()), but the output of the initialize-routine shows for leukoData just a empty AnnotatedDataFrame. Do you have a clue what I do wrong there?
>
> Elmar
>
>
> /*** begin listing ****/
>
> library(Biobase) # base library
>
> ### build class and methodes ####
> removeClass("LeukoSet") # only for development reason
>
> # define LeukoSet class, inhert eSet class
> setClass("LeukoSet", contains = "eSet", representation(leukoData = "AnnotatedDataFrame"), prototype(new("VersionedBiobase", versions = c(classVersion("eSet"), classVersion("AnnotatedDataFrame"), LeukoSet = "0.1.0"))))
>
> # manipulate generic functions
> # initialize to set the input to the slots. signature LeukoSet.
> setMethod("initialize", signature("LeukoSet"),
> function(.Object, assayData, leukoData = new("AnnotatedDataFrame"), ... ) {
> #function(.Object, ... ) {
> #.local <- function(.Object, assayData, leukoData = annotatedDataFrameFrom(assayData, byaxis= 'z'), ... ) {
> # ctrl assayData stolen from eSet Initialization method
> mySlots <- slotNames(.Object)
> dotArgs <- list(...)
> isSlot <- names(dotArgs) %in% mySlots
> if (missing(assayData)) assayData <- do.call(assayDataNew, dotArgs[!isSlot], envir = parent.frame())
> else {
> Biobase:::checkClass(assayData, "AssayData", class(.Object))
> cat("hallo assayData \n")
> nms <- if (storageMode(assayData) == "list") names(assayData)
> else ls(assayData)
> dupNames <- nms %in% names(dotArgs[!isSlot])
> if (any(dupNames)) warning("initialize argument(s) '", paste(nms[dupNames], collapse = "' '"), "' also present in 'assayData'; argument(s) ignored")
> }
> # ctrl leukoData
> if (!missing(leukoData)) {
> Biobase:::checkClass(leukoData, "AnnotatedDataFrame", class(.Object))
> cat("hallo leukoData \n")
> dimLabels(leukoData) <- c("leukoNames", "leukoColumns")
> }
> # pass ctrl to the next methode in the linearization that was computed by the generic function and return
> browser()
> callNextMethod(.Object, assayData = assayData, ...)
> #.Object <- callNextMethod(.Object, assayData = assayData, ...)
> #do.call(callNextMethod, c(.Object, assayData = assayData, ...))
> #}
> #.local(.Object, ...)
> })
>
> # generic accessor function for the leukoData slot - abstract data type ADT
> setGeneric("leukoData", function(object,...) standardGeneric("leukoData"))
> setMethod("leukoData", signature("LeukoSet"), function(object,...) object at leukoData)
>
> # TEST
> # the environment
> e1 = new.env(hash = TRUE)
> e1$a0 <- matrix(0:8, nc = 3)
> rownames(e1$a0) <- c("y0","y1","y2")
> colnames(e1$a0) <- c("x0","x1","x2")
> # the list
> l1 = list(a0 = e1$a0)
> # the matrix
> m1 = e1$a0
> # annotateddataframes
> pd.df <- data.frame(abc = c("phe_null","phe_eins","phe_zwei"), numb = c("+0","+1.1","+2"))
> fd.df <- data.frame(abc = c("fea_null","fea_eins","fea_zwei"), numb = c("0","1.1","2"))
> ld.df <- data.frame(abc = c("leo_null","leo_eins","leo_zwei"), numb = c("-0","-1.1","-2"))
> rownames(pd.df) <- c("x0","x1","x2")
> rownames(fd.df) <- c("y0","y1","y2")
> rownames(ld.df) <- c("a0","a1","a2")
> mewe.df <- data.frame(labelDescription = c("alpha BETI c","nu MERI c"), row.names = c("abc","numb"))
> pd.s4 <- new("AnnotatedDataFrame", data = pd.df, varMetadata = mewe.df)
> fd.s4 <- new("AnnotatedDataFrame", data = fd.df, varMetadata = mewe.df)
> ld.s4 <- new("AnnotatedDataFrame", data = ld.df, varMetadata = mewe.df)
> # vectors
> a.v <- "htsdb"
> # miame
> miame.s4 <- new('MIAME', name = "Elmar Bucher", lab = "VTT Technical Research Center of Finalnd - Medical Biotechnology", contact = "elmar.bucheratvtt.fi", title = "the LeukoSet", abstract = "crash test", url = "http://www.petzl.com/en/outdoor/petzl-tv", other = list(notes = "check it out!"))
>
> # run
> lset <- new("LeukoSet", assayData = e1, phenoData = pd.s4, featureData = fd.s4, leukoData = ld.s4, experimentData = miame.s4, annnotation = a.v)
> # browser!
> lset
> leukoData(lset)
>
>
> /*** end of listing ***/
>
>
>
> -----Original Message-----
> From: Martin Morgan [mailto:mtmorgan at fhcrc.org]
> Sent: 08 December 2009 20:55
> To: Bucher Elmar
> Cc: bioconductor at stat.math.ethz.ch
> Subject: Re: [BioC] Error in .local(.Object, ...) : could not find function "checkClass"
>
> Hi Elmar --
>
> Ext-Elmar.Bucher at vtt.fi wrote:
>> Dear List,
>>
>> I'm writing on extension of the eSet class.
>>
>> getMethod("initialize","eSet") and getMethod("sampleNames<-","AssayData") from the Biobase package are particularly using functions like "checkClass", "assayDataEnvLock", "assayDataStorageMode".
>>
>> In my implementation I would like to use the same functions but I receive errors like:
>> Error in .local(.Object, ...) : could not find function "checkClass"
>>
>> Why?
>> How can I enable my code to use this functions? Because the eSet initialize code seems to be able to use this functions, whit the very same packages loaded.
>> I have the same problem on linux and windows machines. See sessionInfo below.
>
> These functions are defined in Biobase but not exported. They are
> accessible with
>
> Biobase:::checkClass
>
> and the like, but probably you do not want to do this. Perhaps you want
> to use callNextMethod() or similar, or the functions that are actually
> exported? What specifically do you want to accomplish? Maybe some hints
> in, e.g.,
>
> library(oligoClasses)
> selectMethod(initialize, "SnpCallSetPlus")
>
> If I'd written a class to do something special with 'sampleNames', say
> force them to be upper case, then I might do something like
>
> setClass("A", contains="eSet")
> setReplaceMethod("sampleNames", c("A", "character"),
> function(object, value)
> {
> callNextMethod(object=object, value=toupper(value))
> })
>
> and then
>
>> a = new("A", exprs=matrix(rnorm(200), 20))
>> sampleNames(a)
> [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
>> sampleNames(a) <- letters[1:10]
>> sampleNames(a)
> [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
>>
>
>
>
> Martin
>
>>
>> Grateful for help, Elmar
>>
>>
>>
>>> sessionInfo()
>> R version 2.10.0 (2009-10-26)
>> x86_64-pc-linux-gnu
>>
>> 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=C LC_MESSAGES=en_US.UTF-8
>> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
>> [9] LC_ADDRESS=C LC_TELEPHONE=C
>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> other attached packages:
>> [1] RBioinf_1.6.0 graph_1.20.0 Biobase_2.6.0
>>
>> loaded via a namespace (and not attached):
>> [1] cluster_1.12.1 tools_2.10.0
>>
>>> sessionInfo()
>> R version 2.10.0 (2009-10-26)
>> i386-pc-mingw32
>>
>> locale:
>> [1] LC_COLLATE=English_United Kingdom.1252
>> [2] LC_CTYPE=English_United Kingdom.1252
>> [3] LC_MONETARY=English_United Kingdom.1252
>> [4] LC_NUMERIC=C
>> [5] LC_TIME=English_United Kingdom.1252
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> other attached packages:
>> [1] RBioinf_1.6.0 graph_1.24.1 Biobase_2.6.0
>>
>> loaded via a namespace (and not attached):
>> [1] tools_2.10.0
>>
>> _______________________________________________
>> Bioconductor mailing list
>> Bioconductor at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>
>
> --
> Martin Morgan
> 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
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
More information about the Bioconductor
mailing list