Hi Martin, is proto in S3?
I will take a look first at the simple package EBImage. Thank you very much for the suggestions! Best Simon On Aug 9, 2013, at 5:01 PM, Martin Morgan <mtmor...@fhcrc.org> wrote: > On 08/09/2013 07:45 AM, Bert Gunter wrote: >> Simon: >> >> Have a look at the "proto" package for which there is a vignette. You >> may find it suitable for your needs and less intimidating. > > Won't help much with S4, though! Some answers here > > http://stackoverflow.com/questions/5437238/which-packages-make-good-use-of-s4-objects > > including from Bioconductor simple class in EBImage, the advanced IRanges > package and the 'toy' StudentGWAS. > > Martin > >> >> Cheers, >> Bert >> >> On Fri, Aug 9, 2013 at 7:40 AM, Simon Zehnder <szehn...@uni-bonn.de> wrote: >>> Hi Martin, >>> >>> thank you very much for this profound answer! Your added design advice is >>> very helpful, too! >>> >>> For the 'simple example': Sometimes I am still a little overwhelmed from a >>> certain setting in the code and my ideas how I want to handle a process. >>> But I learn from session to session. In future I will also span the lines >>> more than 80 columns. I am used to the indent in my vim editor. >>> >>> I have one further issue: I do know, that you are one of the leading >>> developers of the bioconductor package which uses (as far as I have read) >>> extensively OOP in R. Is there a package you could suggest to me to learn >>> from by reading and understanding the code? Where can I find the source >>> code? >>> >>> Best >>> >>> Simon >>> >>> >>> On Aug 8, 2013, at 10:00 PM, Martin Morgan <mtmor...@fhcrc.org> wrote: >>> >>>> On 08/04/2013 02:13 AM, Simon Zehnder wrote: >>>>> So, I found a solution: First in the "initialize" method of class C coerce >>>>> the C object into a B object. Then call the next method in the list with >>>>> the >>>>> B class object. Now, in the "initialize" method of class B the object is >>>>> a B >>>>> object and the respective "generateSpec" method is called. Then, in the >>>>> "initialize" method of C the returned object from "callNextMethod" has to >>>>> be >>>>> written to the C class object in .Object. See the code below. >>>>> >>>>> setMethod("initialize", "C", function(.Object, value) {.Object@c <- value; >>>>> object <- as(.Object, "B"); object <- callNextMethod(object, value); >>>>> as(.Object, "B") <- object; .Object <- generateSpec(.Object); >>>>> return(.Object)}) >>>>> >>>>> This setting works. I do not know though, if this setting is the "usual" >>>>> way >>>>> such things are done in R OOP. Maybe the whole class design is >>>>> disadvantageous. If anyone detects a mistaken design, I am very thankful >>>>> to >>>>> learn. >>>> >>>> Hi Simon -- your 'simple' example is pretty complicated, and I didn't >>>> really follow it in detail! The code is not formatted for easy reading >>>> (e.g., lines spanning no more than 80 columns) and some of it (e.g., >>>> generateSpec) might not be necessary to describe the problem you're having. >>>> >>>> A good strategy is to ensure that 'new' called with no arguments works >>>> (there are other solutions, but following this rule has helped me to keep >>>> my classes and methods simple). This is not the case for >>>> >>>> new("A") >>>> new("C") >>>> >>>> The reason for this strategy has to do with the way inheritance is >>>> implemented, in particular the coercion from derived to super class. >>>> Usually it is better to provide default values for arguments to >>>> initialize, and to specify arguments after a '...'. This means that your >>>> initialize methods will respects the contract set out in ?initialize, in >>>> particular the handling of unnamed arguments: >>>> >>>> ...: data to include in the new object. Named arguments >>>> correspond to slots in the class definition. Unnamed >>>> arguments must be objects from classes that this class >>>> extends. >>>> >>>> I might have written initialize,A-method as >>>> >>>> setMethod("initialize", "A", function(.Object, ..., value=numeric()){ >>>> .Object <- callNextMethod(.Object, ..., a=value) >>>> generateSpec(.Object) >>>> }) >>>> >>>> Likely in a subsequent iteration I would have ended up with (using the >>>> convention that function names preceded by '.' are not exported) >>>> >>>> .A <- setClass("A", representation(a = "numeric", specA = "numeric")) >>>> >>>> .generateSpecA <- function(a) { >>>> 1 / a >>>> } >>>> >>>> A <- function(a=numeric(), ...) { >>>> specA <- .generateSpecA(a) >>>> .A(..., a=a, specA=specA) >>>> } >>>> >>>> setMethod(generateSpec, "A", function(object) { >>>> .generateSpecA(object@a) >>>> }) >>>> >>>> ensuring that A() returns a valid object and avoiding the definition of an >>>> initialize method entirely. >>>> >>>> Martin >>>> >>>>> >>>>> Best >>>>> >>>>> Simon >>>>> >>>>> >>>>> On Aug 3, 2013, at 9:43 PM, Simon Zehnder <simon.zehn...@googlemail.com> >>>>> wrote: >>>>> >>>>>> setMethod("initialize", "C", function(.Object, value) {.Object@c <- >>>>>> value; >>>>>> .Object <- callNextMethod(.Object, value); .Object <- >>>>>> generateSpec(.Object); return(.Object)}) >>>>> >>>>> ______________________________________________ R-help@r-project.org >>>>> mailing >>>>> list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the >>>>> posting >>>>> guide http://www.R-project.org/posting-guide.html and provide commented, >>>>> minimal, self-contained, reproducible code. >>>>> >>>> >>>> >>>> -- >>>> 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 >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> >> > > > -- > 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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.