From rpeng at jhsph.edu  Thu Apr 21 19:01:54 2005
From: rpeng at jhsph.edu (Roger D. Peng)
Date: Thu Apr 21 19:02:04 2005
Subject: [Rd] Objects in R
In-Reply-To: <20050421163730.20887.qmail@web30213.mail.mud.yahoo.com>
References: <20050421163730.20887.qmail@web30213.mail.mud.yahoo.com>
Message-ID: <4267DC82.3000005@jhsph.edu>

One important thing to remember, which I think some more 
experienced programmers may forget, is that R is two things---a 
programming language and an *interactive* system for statistics 
and graphics.  Maintaining the "interactive-ableness" of R may 
have imposed certain design choices.  I personally think the 
current S4 system of generics/methods is quite suitable for both 
the "programming" and "interactive" sides of R.

Just $0.02.

-roger

Nathan Whitehouse wrote:
> Hi,
>   A few comments from a fairly experienced R user who
> worked for several years on a R-based bioinformatics
> analysis framework.
> 
>   I don't want to misrepresent anyone's views, but...
> 
>   There are real disadvantages to the
> "objects-as-C-structs" and functions/methods which
> "mutate" based on argument type. i.e. S4.
> 
>   (1)Novices simply don't understand it.  Students are
> trained in "standard" object-oriented technique and
> this wonkish offshoot(puritanical functional
> programming) just increases the information costs to
> using R and thus decreases the demand.
> 
>   (2)Large frameworks benefit from
> serializable/storable objects which contain both
> functionality and modifiable values.  S4 stores
> "class" information and R.oo does not upon
> "save()"ing, but there are still real hindrances to
> "trading" objects, which is -extraordinarily-
> important in creating industrial-variety R-based
> analysis.
>   The classical example in my mind is the difficulties
> in implementing a "visitor" pattern in S4.  
> 
>   (3)The absence of references means for large
> datasets and long "analysis flows," there is (1)a
> hideous amount of memory used storing each predecessor
> analysis or (2)there are awkward "references" that
> I've seen used like storing the name of the reference
> object in a data slot.
>   I find the use of environments in R.oo as opposed to
> the glorified LISTSXP of S4 to be a satisfying way
> around this.
> 
>   S4 is a nice step forward.  But R should be open to
> further evolution.  The design choices for S4 and the
> reasons behind abandoning OOP have never been
> adequately justified in my knowledge.  Instead most
> inquiries have been met by a Sphinx-like silence by
> the core community.
> 
>   But the hindrances faced by our friend Ali are
> common, and even in packages maintained by experienced
> R developers, S4 is implemented shall we say curiously
> as per the specs.
>   Clearly OOP and R.oo are not the final answer.  But
> some serious discussion about why packages like R.oo
> which "layer" onto the standard functional R are
> inappropriate is in order.
> 
>   It would be great to see R emerge from its niche
> audience.  I believe that would aid statisticians and
> programmers.  However, a little bit more transparency
> and something beyond a categorical "we just don't like
> that way of doing things" would go a long way towards
> growing the base community of R.
>  
>   Cheers,
>   Nathan Whitehouse
>   Formerly of Baylor College of Medicine.
> 
> Ali, maybe we R-core members are not decent enough.
> But we strongly believe that we don't want to advocate
> yet
> another object system additionally to the S3 and S4
> one,
> and several of us have given talks and classes, even
> written
> books on how to do "decent" object oriented
> programming 
> `just' with the S3 and/or S4 object system.
> 
> No need of additional "oo" in our eyes.
> Your main problem is that you assume what "oo" means
> {which may
> well be true} but *additionally* you also assume that
> OO has to
> be done in the same way you know it from Python, C++,
> or Java..
> 
> Since you are new, please try to learn the S4 way,
> where methods belong to (generic) functions more than
> to classes in some way, particularly if you compare
> with other
> OO systems where methods belong entirely to classes.
> This is NOT true for R (and S-plus) and we don't want
> this to
> change {and yes, we do know about C++, Python,
> Java,... and
> their way to do OO}.
> 
> Please also read in more details the good advice given
> by Tony
> Plate and Sean Davis.
> 
> Martin Maechler,
> ETH Zurich
> 
> 
> 
> Nathan Whitehouse
> nlwhitehouse@yahoo.com
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

-- 
Roger D. Peng
http://www.biostat.jhsph.edu/~rpeng/


[Rd] Objects in R
Roger D. Peng