From maechler at stat.math.ethz.ch  Mon Feb 27 16:19:05 2012
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Mon, 27 Feb 2012 16:19:05 +0100
Subject: [Rd] Identical copy of base function
In-Reply-To: <CABDUZc_sm=kRjLpxAA+96pgrLoexKAn72ktZfwMAmXZM2j5HeQ@mail.gmail.com>
References: <144b5f48a1aa59e2bbcd8b96a3990edd.squirrel@webmail.plus.net>
	<20299.28947.791010.435828@stat.math.ethz.ch>
	<CABDUZc_sm=kRjLpxAA+96pgrLoexKAn72ktZfwMAmXZM2j5HeQ@mail.gmail.com>
Message-ID: <20299.40681.439249.565831@stat.math.ethz.ch>

>>>>> Jeffrey Ryan <jeffrey.ryan at lemnica.com>
>>>>>     on Mon, 27 Feb 2012 07:39:32 -0600 writes:

    > Doesn't this also mean that if Matrix is loaded first,
    > det() will be calling Matrix::determinant, which could be
    > quite surprising change in behavior from expectation?


    > This seems rather dangerous and 'untrustworthy' to me -
    > unless I am missing some other hidden mechanism involved here.

The only change in R-devel is that library() does not warn about
*conflicts* in such a case.
This behavior (and the R code in library()'s checkConflicts())
is completely analogous to  
     importFrom("base", det)
     export(det)
but as you surely know, we can not (yet?) import from base.

So again: No changed behavior of R, just some warnings less in a
case where they are typically inappropriate.

    > I haven't read the code yet, and I am sure Matrix will "do
    > the right thing", but I have strong reservations about
    > this behavior when applied to the general universe of R
    > and CRAN.

    > Jeff

    > On Mon, Feb 27, 2012 at 6:03 AM, Martin Maechler
    > <maechler at stat.math.ethz.ch> wrote:
    >>>>>>> Matthew Dowle <mdowle at mdowle.plus.com> ? ? on Mon,
    >>>>>>> 27 Feb 2012 09:59:43 +0000 writes:
    >> 
    >> ? ?> Hello,
    >> 
    >> ? ?> Regarding this in R-devel/NEWS/New features :
    >> 
    >> ? ?> o 'library(pkg)' no longer warns about a conflict
    >> with a ? ?> function from 'package:base' if the function
    >> is an ? ?> identical copy of the base one but with a
    >> different ? ?> environment.
    >> 
    >> ? ?> Why would one want an identical copy in a different
    >> ? ?> environment? I'm thinking I may be missing out on a
    >> trick ? ?> here.
    >> 
    >> Yes, you are ;-) ? The trick is called ``namespace'' :
    >> 
    >> One example which lead me to implement the above:
    >> 
    >> The Matrix package has had an identical copy of 'det' for
    >> a while now, but of course ?in the Matrix namespace.
    >> Because of that, the call to determinant() inside det()
    >> will correctly dispatch Matrix methods for determinant(),
    >> whereas base::det() would not.
    >> 
    >> Martin
    >> 
    >> ______________________________________________
    >> R-devel at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel



    > -- 
    > Jeffrey Ryan jeffrey.ryan at lemnica.com

    > www.lemnica.com www.esotericR.com

    > R/Finance 2012: Applied Finance with R www.RinFinance.com

    > See you in Chicago!!!!



[Rd] Identical copy of base function
Martin Maechler