[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