On Sun, Nov 2, 2014 at 12:19 AM, Wolfgang Huber <whu...@embl.de> wrote:

> Just to bring the discussion back to the fact that there is a need to do
> /something/. A function plotPCA is defined in packages EDASeq, DESeq2,
> DESeq, affycoretools, Rcade, facopy, CopyNumber450k, netresponse, MAIT,
> with a real potential for needless user confusion. And BiocGenerics already
> defines the generics plotMA and plotDispEsts.
>
> The need for BiocGenerics in the first place is a consequence of the S4 /
> Dylan / Common LISP object system and the fact that our project releases
> more than one package. We should not confuse that with the other issues
> that came up in the thread.
>
> To what extent functions that do related things should have the same name
> seems a matter of taste. Reducing the number of function names that are
> around, but increasing the number of classes, seems pretty much a null-sum
> game to me. <irony> We could have a ‘compute’ generic, for all functions
> that compute something? Might make things easier for some users. Until some
> authors start using its argument ‘what’ to say what it should compute if
> it’s not already clear from the class of its argument(s). </irony>
>
>
I think there are real benefits to having a general "plot" abstraction. For
example, a reporting framework or GUI could use it to render a graphical
representation of an object. That doesn't preclude specific functions for
particular plot variants. It would just be nice to have a default
visualization of an object, in the same way we can call print to produce a
textual representation at the console. They're complementary.


> I second Mike’s suggestion & Kasper’s points.
>
> Best wishes
>         Wolfgang
>
> > On 1 Nov 2014, at 19:46, Kasper Daniel Hansen <
> kasperdanielhan...@gmail.com> wrote:
> >
> > I see the argument for separating plotting and computation.
> >
> > I don't see the argument for changing plotPCA to plot.  base R has things
> > that work either way; we all know hist(), boxplot() etc etc.  And for
> this
> > specific case there are (good) arguments for the fact that one could
> > envision several plots on a PCA object.
> >
> > But while I see the argument, by having a common class which all packages
> > should use, it becomes pretty hard to have package specific customization
> > (colors, phenodata etc etc), or it will at least require some thinking.
> >
> > Best,
> > Kasper
> >
> > On Sat, Nov 1, 2014 at 2:21 PM, Michael Love <
> michaelisaiahl...@gmail.com>
> > wrote:
> >
> >> On Nov 1, 2014 1:29 PM, "Michael Love" <michaelisaiahl...@gmail.com>
> >> wrote:
> >>>
> >>> As far as the proposal of using the plot() function for all plots, I
> >>> think for the biologists who are struggling already to get R going,
> >>> and to figure out what kinds of plots are possible, plotMA (and
> >>> knowing that the help is available at ?plotMA) is just so much simpler
> >>> than the alternative (isn't it ?"plot,MA-method" for S4?).
> >>>
> >>
> >> Scratch that... I forgot that finding help has to be ugly either way.
> >>
> >>
> >>
> >>>
> >>> On Fri, Oct 31, 2014 at 9:10 PM, Michael Lawrence
> >>> <lawrence.mich...@gene.com> wrote:
> >>>> Sure, the ggplot model (returning an abstract representation of a
> plot,
> >> and
> >>>> then rendering it when requested, i.e., printed) is preferable to the
> >> side
> >>>> effects of base graphics. Unfortunately, plot() implies the side
> >> effect,
> >>>> which motivated the introduction of autoplot() in ggbio, and in fact
> we
> >>>> used Steve's type= parameter idea in many of the autoplot methods.
> >> While I
> >>>> agree that plotScree() could be preferable to plot(type="scree"), it's
> >>>> still beneficial to have the abstraction, if only for convenience and
> >> to
> >>>> support generic code. Btw, a (S3) pca object already exists: see
> >> ?princomp.
> >>>>
> >>>> Michael
> >>>>
> >>>> On Fri, Oct 31, 2014 at 3:53 PM, Ryan C. Thompson <
> >> r...@thompsonclan.org>
> >>>> wrote:
> >>>>
> >>>>> I'd just like to chime in that regardless of what approach is chosen,
> >> I
> >>>>> definitely would appreciate a way to get the plot data without
> >> actually
> >>>>> making the plot. I often end up reimplementing plots in ggplot so
> that
> >> I
> >>>>> can easily customize some aspect of them, so in such cases I need a
> >> way to
> >>>>> just get the plot data/coordinates.
> >>>>>
> >>>>> For example, if I have an edgeR DGEList and I want to get the X and Y
> >>>>> coordinates for the MDS plot, I need to do something like:
> >>>>>
> >>>>> dev.new()
> >>>>> mds.coords <- plotMDS(dge)
> >>>>> dev.off()
> >>>>>
> >>>>> which is kind of unfortunate.
> >>>>>
> >>>>> So I guess this is more a reminder to people implementing plots to
> >> also
> >>>>> implement a way to get the plot data.
> >>>>>
> >>>>> -Ryan
> >>>>>
> >>>>>
> >>>>> On Fri 31 Oct 2014 03:43:04 PM PDT, Steve Lianoglou wrote:
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> On Fri, Oct 31, 2014 at 2:35 PM, Thomas Lin Pedersen
> >>>>>> <thomas...@gmail.com> wrote:
> >>>>>>
> >>>>>>> With regards to abstraction - I would personally much rather read
> >> and
> >>>>>>> write code that contained plotScores() and plotScree() etc. where
> >> the
> >>>>>>> intend of the code is clearly communicated, instead of relying on a
> >> plot()
> >>>>>>> function whose result is only known from experience. Trying to
> >> squeeze
> >>>>>>> every kind of visual output into the same plot generic seems
> >> artificial and
> >>>>>>> constrained to me. I totally agree on the plotPCA critique on the
> >> other
> >>>>>>> hand...
> >>>>>>>
> >>>>>>
> >>>>>> If we've bought a ticket to ride on Kevin's and Michael's (and
> >> whoever
> >>>>>> else) train of thought, wouldn't plot(pca(x), type='scree') or
> >>>>>> plot(pca(x), type='scores') be the preferred way to go ... for some
> >>>>>> definition of "preferable"?
> >>>>>>
> >>>>>> -steve
> >>>>>>
> >>>>>>
> >>>>>>> Thomas
> >>>>>>>
> >>>>>>>
> >>>>>>> On 31 Oct 2014, at 22:09, Michael Lawrence <
> >> lawrence.mich...@gene.com>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> I strongly agree with Kevin's position. plotPCA() represents two
> >>>>>>>> separate concerns in its very name: the computation and the
> >> rendering.
> >>>>>>>> Those need to be separated, at least behind the scenes. The syntax
> >> of
> >>>>>>>> plot(pca(x)) is preferable to plotPCA, because the structure of
> the
> >>>>>>>> operation is represented by in the expression itself, not just in
> a
> >>>>>>>> non-computable function name.
> >>>>>>>>
> >>>>>>>> With regard to how a plot,PCA should behave: there is always a
> >> tension
> >>>>>>>> between high-level and low-level APIs. In the end, we need
> multiple
> >> levels
> >>>>>>>> of abstraction.  While high-level APIs sacrifice flexibility, we
> >> need them
> >>>>>>>> because they communicate the high-level *intent* of the user in
> the
> >> code
> >>>>>>>> itself (self-documenting code), and they enable reusability, which
> >> not only
> >>>>>>>> reduces redudant effort but also ensures consistency. Once our
> >> brains no
> >>>>>>>> longer need to parse low-level code, we can focus our mental power
> >> on
> >>>>>>>> correctness and efficiency. To design a high-level API, one needs
> >> to
> >>>>>>>> carefully analyze user requirements, i.e., the use cases. To
> choose
> >> the
> >>>>>>>> default behavior, one needs to rate the use cases by their
> >> prevalance, and
> >>>>>>>> by how closely they match the intuition-based expectations of the
> >> user.
> >>>>>>>>
> >>>>>>>> The fact that at least 9 packages are performing such a similar
> >> task
> >>>>>>>> seems to indicate that a common abstraction is warranted, but I am
> >> not sure
> >>>>>>>> if BiocGenerics is the appropriate place.
> >>>>>>>>
> >>>>>>>> Michael
> >>>>>>>>
> >>>>>>>> On Tue, Oct 21, 2014 at 12:54 AM, Thomas Dybdal Pedersen <
> >>>>>>>> thomas...@gmail.com <mailto:thomas...@gmail.com>> wrote:
> >>>>>>>> While I tend to agree with you that PCA is too big an operation to
> >> be
> >>>>>>>> hidden within a plotting function (MDS is an edge-case I would
> >> say), I
> >>>>>>>> can't see how we can ever reach a point where there is only one
> >> generic
> >>>>>>>> plot function. In the case of PCA there is a number of different
> >> plot-types
> >>>>>>>> that can all lay claim to the plot function of a PCA class, for
> >> instance
> >>>>>>>> scoreplot, scatterplot matrix of all scores, biplot, screeplot,
> >> accumulated
> >>>>>>>> R^2 barplot, leverage vs. distance-to-model... (you get the idea).
> >> So while
> >>>>>>>> having some very well-thought out classes for very common result
> >> types such
> >>>>>>>> as PCA, this class would still need a lot of different plot
> methods
> >> such as
> >>>>>>>> plotScores, plotScree etc (or plot(..., type='score'), but I don't
> >> find
> >>>>>>>> that very appealing). Expanding beyond PCA only muddles the water
> >> even more
> >>>>>>>> - there are very few interesting data structures that only have
> one
> >> visual
> >>>>>>>> representation to-rule-them-all...
> >>>>>>>>
> >>>>>>>> just my 2c
> >>>>>>>>
> >>>>>>>> best
> >>>>>>>> Thomas
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Date: Mon, 20 Oct 2014 18:50:48 -0400
> >>>>>>>>> From: Kevin Coombes <kevin.r.coom...@gmail.com <mailto:
> >>>>>>>>> kevin.r.coom...@gmail.com>>
> >>>>>>>>>
> >>>>>>>>> Well. I have two responses to that.
> >>>>>>>>>
> >>>>>>>>> First, I think it would be a lot better/easier for users if
> (most)
> >>>>>>>>> developers could make use of the same plot function for "basic"
> >> classes
> >>>>>>>>> like PCA.
> >>>>>>>>>
> >>>>>>>>> Second, if you think the basic PCA plotting routine needs
> >> enhancements,
> >>>>>>>>> you still have two options.  On the one hand, you could (as you
> >> said)
> >>>>>>>>> try to convince the maintainer of PCA to add what you want.  If
> >> it's
> >>>>>>>>> generally valuable, then he'd probably do it --- and other
> classes
> >> that
> >>>>>>>>> use it would benefit.  On the other hand, if it really is a
> >> special
> >>>>>>>>> enhancement that only makes sense for your class, then you can
> >> derive a
> >>>>>>>>> class from the basic PCA class
> >>>>>>>>>     setClass("mySpecialPCA", contains=c("PCA"), *other stuff
> >> here*)
> >>>>>>>>>  and implement your own version of the "plot" generic for this
> >> class.
> >>>>>>>>> And you could tweak the "as.PCA" function so it returns an object
> >> of
> >>>>>>>>> the
> >>>>>>>>> mySpecialPCA class. And the user could still just "plot" the
> >> result
> >>>>>>>>> without hacving to care what's happening behind the scenes.
> >>>>>>>>>
> >>>>>>>>> On 10/20/2014 5:59 PM, Michael Love wrote:
> >>>>>>>>>
> >>>>>>>>>> Ah, I see now. Personally, I don't think Bioconductor developers
> >>>>>>>>>> should have to agree on single plotting functions for basic
> >> classes
> >>>>>>>>>> like 'PCA' (because this logic applies equally to the situation
> >> of all
> >>>>>>>>>> Bioconductor developers agreeing on single MA-plot, a single
> >>>>>>>>>> variance-mean plot, etc). I think letting developers define
> their
> >>>>>>>>>> plotPCA makes contributions easier (I don't have to ask the
> owner
> >> of
> >>>>>>>>>> plot.PCA to incorporate something), even though it means we have
> >> a
> >>>>>>>>>> growing list of generics.
> >>>>>>>>>>
> >>>>>>>>>> Still you have a good point about splitting computation and
> >> plotting.
> >>>>>>>>>> In practice, we subset the rows so PCA is not laborious.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Mon, Oct 20, 2014 at 5:38 PM, Kevin Coombes
> >>>>>>>>>> <kevin.r.coom...@gmail.com <mailto:kevin.r.coom...@gmail.com>
> >>>>>>>>>> <mailto:kevin.r.coom...@gmail.com <mailto:
> >> kevin.r.coom...@gmail.com>>>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>    Hi,
> >>>>>>>>>>
> >>>>>>>>>>    I don't see how it needs more functions (as long as you can
> >> get
> >>>>>>>>>>    developers to agree).  Suppose that someone can define a
> >> reusable
> >>>>>>>>>>    PCA class.  This will contain a single "plot" generic
> >> function,
> >>>>>>>>>>    defined once and reused by other classes. The existing
> >> "plotPCA"
> >>>>>>>>>>    interface can also be implemented just once, in this class,
> >> as
> >>>>>>>>>>
> >>>>>>>>>>        plotPCA <- function(object, ...) plot(as.PCA(object),
> >> ...)
> >>>>>>>>>>
> >>>>>>>>>>    This can be exposed to users of your class through
> >> namespaces.
> >>>>>>>>>>    Then the only thing a developer needs to implement in his own
> >>>>>>>>>>    class is the single "as.PCA" function.  And he/she would have
> >>>>>>>>>>    already been rquired to implement this as part of the old
> >>>>>>>>>>    "plotPCA" function.  So it can be extracted from that, and
> >> the
> >>>>>>>>>>    developer doesn't have to reimplement the visualization code
> >> from
> >>>>>>>>>>    the PCA class.
> >>>>>>>>>>
> >>>>>>>>>>    Best,
> >>>>>>>>>>      Kevin
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>    On 10/20/2014 5:15 PM, davide risso wrote:
> >>>>>>>>>>
> >>>>>>>>>>>    Hi Kevin,
> >>>>>>>>>>>
> >>>>>>>>>>>    I see your points and I agree (especially for the specific
> >> case
> >>>>>>>>>>>    of plotPCA that involves some non trivial computations).
> >>>>>>>>>>>
> >>>>>>>>>>>    On the other hand, having a wrapper function that starting
> >> from
> >>>>>>>>>>>    the "raw" data gives you a pretty picture (with virtually
> >> zero
> >>>>>>>>>>>    effort by the user) using a sensible choice of parameters
> >> that
> >>>>>>>>>>>    are more or less OK for RNA-seq data is useful for
> >> practitioners
> >>>>>>>>>>>    that just want to look for patterns in the data.
> >>>>>>>>>>>
> >>>>>>>>>>>    I guess it would be the same to have a PCA method for each
> >> of the
> >>>>>>>>>>>    objects and then using the plot method on those new objects,
> >> but
> >>>>>>>>>>>    that would just create a lot more objects and functions than
> >> the
> >>>>>>>>>>>    current approach (like Mike was saying).
> >>>>>>>>>>>
> >>>>>>>>>>>    Your "as.pca" or "performPCA" approach would be definitely
> >> better
> >>>>>>>>>>>    if all the different methods would create objects of the
> >> *same*
> >>>>>>>>>>>    PCA class, but since we are talking about different
> >> packages, I
> >>>>>>>>>>>    don't know how easy it would be to coordinate. But perhaps
> >> this
> >>>>>>>>>>>    is the way we should go.
> >>>>>>>>>>>
> >>>>>>>>>>>    Best,
> >>>>>>>>>>>    davide
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>    On Mon, Oct 20, 2014 at 1:26 PM, Kevin Coombes
> >>>>>>>>>>>    <kevin.r.coom...@gmail.com <mailto:
> >> kevin.r.coom...@gmail.com>
> >>>>>>>>>>> <mailto:kevin.r.coom...@gmail.com <mailto:
> >> kevin.r.coom...@gmail.com>>>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>        Hi,
> >>>>>>>>>>>
> >>>>>>>>>>>        It depends.
> >>>>>>>>>>>
> >>>>>>>>>>>        The "traditional" R approach to these matters is that
> >> you (a)
> >>>>>>>>>>>        first perform some sort of an analysis and save the
> >> results
> >>>>>>>>>>>        as an object and then (b) show or plot what you got.  It
> >> is
> >>>>>>>>>>>        part (b) that tends to be really generic, and (in my
> >> opinion)
> >>>>>>>>>>>        should have really generic names -- like "show" or
> >> "plot" or
> >>>>>>>>>>>        "hist" or "image".
> >>>>>>>>>>>
> >>>>>>>>>>>        With PCA in particular, you usually have to perform a
> >> bunch
> >>>>>>>>>>>        of computations in order to get the principal components
> >> from
> >>>>>>>>>>>        some part of the data.  As I understand it now, these
> >>>>>>>>>>>        computations are performed along the way as part of the
> >>>>>>>>>>>        various "plotPCA" functions.  The "R way" to do this
> >> would be
> >>>>>>>>>>>        something like
> >>>>>>>>>>>            pca <- performPCA(mySpecialObject)  # or
> >>>>>>>>>>>        as.PCA(mySpecialObject)
> >>>>>>>>>>>            plot(pca) # to get the scatter plot
> >>>>>>>>>>>        This apporach has the user-friendly advantage that you
> >> can
> >>>>>>>>>>>        tweak the plot (in terms of colors, symbols, ranges,
> >> titles,
> >>>>>>>>>>>        etc) without having to recompute the principal
> >> components
> >>>>>>>>>>>        every time. (I often find myself re-plotting the same
> >> PCA
> >>>>>>>>>>>        several times, with different colors or symbols for
> >> different
> >>>>>>>>>>>        factrors associated with the samples.) In addition, you
> >> could
> >>>>>>>>>>>        then also do something like
> >>>>>>>>>>>            screeplot(pca)
> >>>>>>>>>>>        to get a plot of the percentages of variance explained.
> >>>>>>>>>>>
> >>>>>>>>>>>        My own feeling is that if the object doesn't know what
> >> to do
> >>>>>>>>>>>        when you tell it to "plot" itself, then you haven't got
> >> the
> >>>>>>>>>>>        right abstraction.
> >>>>>>>>>>>
> >>>>>>>>>>>        You may still end up needing generics for each kind of
> >>>>>>>>>>>        computation you want to perform (PCA, RLE, MA, etc),
> >> which is
> >>>>>>>>>>>        why I suggested an "as.PCA" function.  After all, "as"
> >> is
> >>>>>>>>>>>        already pretty generic.  In the long run, l this would
> >> herlp
> >>>>>>>>>>>        BioConductor developers, since they wouldn't all have to
> >>>>>>>>>>>        reimplement the visualization code; they would just have
> >> to
> >>>>>>>>>>>        figure out how to convert their own object into a PCA or
> >> RLE
> >>>>>>>>>>>        or MA object.
> >>>>>>>>>>>
> >>>>>>>>>>>        And I know that this "plotWhatever" approach is used
> >>>>>>>>>>>        elsewhere in BioConductor, and it has always bothered
> >> me. It
> >>>>>>>>>>>        just seemed that a post suggesting a new generic
> >> function
> >>>>>>>>>>>        provided a reasonable opportunity to point out that
> >> there
> >>>>>>>>>>>        might be a better way.
> >>>>>>>>>>>
> >>>>>>>>>>>        Best,
> >>>>>>>>>>>          Kevin
> >>>>>>>>>>>
> >>>>>>>>>>>        PS: My own "ClassDicsovery" package, which is available
> >> from
> >>>>>>>>>>>        RForge via
> >>>>>>>>>>>        **|install.packages("ClassDiscovery",
> >>>>>>>>>>>        repos="http://R-Forge.R-project.org <
> >>>>>>>>>>> http://r-forge.r-project.org/>"
> >>>>>>>>>>>        <http://R-Forge.R-project.org <
> >> http://r-forge.r-project.org/
> >>>>>>>>>>>>> )|**
> >>>>>>>>>>>        includes a "SamplePCA" class that does something roughly
> >>>>>>>>>>>        similar to this for microarrays.
> >>>>>>>>>>>
> >>>>>>>>>>>        PPS (off-topic): The worst offender in base R -- because
> >> it
> >>>>>>>>>>>        doesn't use this "typical" approch -- is the "heatmap"
> >>>>>>>>>>>        function.  Having tried to teach this function in
> >> several
> >>>>>>>>>>>        different classes, I have come to the conclusion that it
> >> is
> >>>>>>>>>>>        basically unusable by mortals.  And I think the problem
> >> is
> >>>>>>>>>>>        that it tries to combine too many steps -- clustering
> >> rows,
> >>>>>>>>>>>        clustering columns, scaling, visualization -- all in a
> >> single
> >>>>>>>>>>>        fiunction
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>        On 10/20/2014 3:47 PM, davide risso wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>>        Hi Kevin,
> >>>>>>>>>>>>
> >>>>>>>>>>>>        I don't agree. In the case of EDASeq (as I suppose it
> >> is the
> >>>>>>>>>>>>        case for DESeq/DESeq2) plotting the principal
> >> components of
> >>>>>>>>>>>>        the count matrix is only one of possible exploratory
> >> plots
> >>>>>>>>>>>>        (RLE plots, MA plots, etc.).
> >>>>>>>>>>>>        So, in my opinion, it makes more sense from an object
> >>>>>>>>>>>>        oriented point of view to have multiple plotting
> >> methods for
> >>>>>>>>>>>>        a single "RNA-seq experiment" object.
> >>>>>>>>>>>>
> >>>>>>>>>>>>        In addition, this is the same strategy adopted
> >> elsewhere in
> >>>>>>>>>>>>        Bioconductor, e.g., for the plotMA method.
> >>>>>>>>>>>>
> >>>>>>>>>>>>        Just my two cents.
> >>>>>>>>>>>>
> >>>>>>>>>>>>        Best,
> >>>>>>>>>>>>        davide
> >>>>>>>>>>>>
> >>>>>>>>>>>>        On Mon, Oct 20, 2014 at 11:30 AM, Kevin Coombes
> >>>>>>>>>>>>        <kevin.r.coom...@gmail.com <mailto:
> >> kevin.r.coombes@gmail
> >> .
> >>>>>>>>>>>> com>
> >>>>>>>>>>>>        <mailto:kevin.r.coom...@gmail.com <mailto:
> >>>>>>>>>>>> kevin.r.coom...@gmail.com>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>            I understand that breaking code is a problem, and
> >> that
> >>>>>>>>>>>>            is admittedly the main reason not to immediately
> >> adopt
> >>>>>>>>>>>>            my suggestion.
> >>>>>>>>>>>>
> >>>>>>>>>>>>            But as a purely logical exercise, creating a "PCA"
> >>>>>>>>>>>>            object X or something similar and using either
> >>>>>>>>>>>>                plot(X)
> >>>>>>>>>>>>            or
> >>>>>>>>>>>>            plot(as.PCA(mySpecialObject))
> >>>>>>>>>>>>            is a much more sensible use of object-oriented
> >>>>>>>>>>>>            programming/design. This requires no new generics
> >> (to
> >>>>>>>>>>>>            write or to learn).
> >>>>>>>>>>>>
> >>>>>>>>>>>>            And you could use it to transition away from the
> >> current
> >>>>>>>>>>>>            system by convincing the various package
> >> maintainers to
> >>>>>>>>>>>>            re-implement plotPCA as follows:
> >>>>>>>>>>>>
> >>>>>>>>>>>>            plotPCA <- function(object, ...) {
> >>>>>>>>>>>>              plot(as.PCA(object), ...)
> >>>>>>>>>>>>            }
> >>>>>>>>>>>>
> >>>>>>>>>>>>            This would be relatively easy to eventually
> >> deprecate
> >>>>>>>>>>>>            and teach users to switch to the alternative.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>            On 10/20/2014 1:07 PM, Michael Love wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>>            hi Kevin,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>            that would imply there is only one way to plot an
> >>>>>>>>>>>>>            object of a given class. Additionally, it would
> >> break a
> >>>>>>>>>>>>>            lot of code.?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>            best,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>            Mike
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>            On Mon, Oct 20, 2014 at 12:50 PM, Kevin Coombes
> >>>>>>>>>>>>>            <kevin.r.coom...@gmail.com <mailto:
> >>>>>>>>>>>>> kevin.r.coom...@gmail.com>
> >>>>>>>>>>>>>            <mailto:kevin.r.coom...@gmail.com <mailto:
> >>>>>>>>>>>>> kevin.r.coom...@gmail.com>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                But shouldn't they all really just be named
> >> "plot"
> >>>>>>>>>>>>>                for the appropriate objects?  In which case,
> >> there
> >>>>>>>>>>>>>                would already be a perfectly good generic....
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                On Oct 20, 2014 10:27 AM, "Michael Love"
> >>>>>>>>>>>>>                <michaelisaiahl...@gmail.com <mailto:
> >>>>>>>>>>>>> michaelisaiahl...@gmail.com>
> >>>>>>>>>>>>>                <mailto:michaelisaiahl...@gmail.com <mailto:
> >>>>>>>>>>>>> michaelisaiahl...@gmail.com>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    I noticed that 'plotPCA' functions are
> >> defined
> >>>>>>>>>>>>>                    in EDASeq, DESeq2, DESeq,
> >>>>>>>>>>>>>                    affycoretools, Rcade, facopy,
> >> CopyNumber450k,
> >>>>>>>>>>>>>                    netresponse, MAIT (maybe
> >>>>>>>>>>>>>                    more).
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    Sounds like a case for BiocGenerics.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    best,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    Mike
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    [[alternative HTML version deleted]]
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>                    ______________________________
> >>>>>>>>>>>>> _________________
> >>>>>>>>>>>>>                    Bioc-devel@r-project.org <mailto:
> >>>>>>>>>>>>> Bioc-devel@r-project.org>
> >>>>>>>>>>>>>                    <mailto:Bioc-devel@r-project.org <mailto:
> >>>>>>>>>>>>> Bioc-devel@r-project.org>> mailing list
> >>>>>>>>>>>>>                    https://stat.ethz.ch/mailman/
> >>>>>>>>>>>>> listinfo/bioc-devel <https://stat.ethz.ch/mailman/
> >>>>>>>>>>>>> listinfo/bioc-devel>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>            ------------------------------
> >>>>>>>>>>>> ------------------------------------------
> >>>>>>>>>>>>            <http://www.avast.com/ <http://www.avast.com/>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>            This email is free from viruses and malware because
> >>>>>>>>>>>>            avast! Antivirus <http://www.avast.com/ <
> >>>>>>>>>>>> http://www.avast.com/>> protection is
> >>>>>>>>>>>>            active.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>        --
> >>>>>>>>>>>>        Davide Risso, PhD
> >>>>>>>>>>>>        Post Doctoral Scholar
> >>>>>>>>>>>>        Division of Biostatistics
> >>>>>>>>>>>>        School of Public Health
> >>>>>>>>>>>>        University of California, Berkeley
> >>>>>>>>>>>>        344 Li Ka Shing Center, #3370
> >>>>>>>>>>>>        Berkeley, CA 94720-3370
> >>>>>>>>>>>>        E-mail: davide.ri...@berkeley.edu <mailto:
> >>>>>>>>>>>> davide.ri...@berkeley.edu>
> >>>>>>>>>>>>        <mailto:davide.ri...@berkeley.edu <mailto:
> >>>>>>>>>>>> davide.ri...@berkeley.edu>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >> ------------------------------------------------------------
> >>>>>>>>>>> ------------
> >>>>>>>>>>>        <http://www.avast.com/ <http://www.avast.com/>>
> >>>>>>>>>>>
> >>>>>>>>>>>        This email is free from viruses and malware because
> >> avast!
> >>>>>>>>>>>        Antivirus <http://www.avast.com/ <http://www.avast.com/
> >>>>
> >>>>>>>>>>> protection is active.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>    --
> >>>>>>>>>>>    Davide Risso, PhD
> >>>>>>>>>>>    Post Doctoral Scholar
> >>>>>>>>>>>    Division of Biostatistics
> >>>>>>>>>>>    School of Public Health
> >>>>>>>>>>>    University of California, Berkeley
> >>>>>>>>>>>    344 Li Ka Shing Center, #3370
> >>>>>>>>>>>    Berkeley, CA 94720-3370
> >>>>>>>>>>>    E-mail: davide.ri...@berkeley.edu <mailto:
> >> davide.risso@berkeley.
> >>>>>>>>>>> edu> <mailto:davide.ri...@berkeley.edu <mailto:
> >>>>>>>>>>> davide.ri...@berkeley.edu>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>    ------------------------------------------------------------
> >>>>>>>>>> ------------
> >>>>>>>>>>    <http://www.avast.com/ <http://www.avast.com/>>
> >>>>>>>>>>
> >>>>>>>>>>    This email is free from viruses and malware because avast!
> >>>>>>>>>>    Antivirus <http://www.avast.com/ <http://www.avast.com/>>
> >>>>>>>>>> protection is active.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> ---
> >>>>>>>>> This email is free from viruses and malware because avast!
> >> Antivirus
> >>>>>>>>> protection is active.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>       [[alternative HTML version deleted]]
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> ------------------------------
> >>>>>>>>>
> >>>>>>>>> _______________________________________________
> >>>>>>>>> Bioc-devel mailing list
> >>>>>>>>> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org>
> >>>>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel <
> >>>>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> End of Bioc-devel Digest, Vol 127, Issue 43
> >>>>>>>>> *******************************************
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>> _______________________________________________
> >>>>>>>> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org>
> mailing
> >> list
> >>>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel <
> >>>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>         [[alternative HTML version deleted]]
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> Bioc-devel@r-project.org mailing list
> >>>>>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>        [[alternative HTML version deleted]]
> >>>>
> >>>> _______________________________________________
> >>>> Bioc-devel@r-project.org mailing list
> >>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
> >>
> >>        [[alternative HTML version deleted]]
> >>
> >> _______________________________________________
> >> Bioc-devel@r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/bioc-devel
> >>
> >
> >       [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > Bioc-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
> _______________________________________________
> Bioc-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>

        [[alternative HTML version deleted]]

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to