From maechler at stat.math.ethz.ch  Tue Dec 18 10:42:25 2007
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Tue, 18 Dec 2007 10:42:25 +0100
Subject: [Rd] help files for load and related functions
In-Reply-To: <47668980.5070001@stats.uwo.ca>
References: <476656E0.1000307@pburns.seanet.com>
	<1197900373.7815.37.camel@maitai.windows.ebi.ac.uk>
	<47668980.5070001@stats.uwo.ca>
Message-ID: <18279.38401.52281.473018@stat.math.ethz.ch>

>>>>> "DM" == Duncan Murdoch <murdoch at stats.uwo.ca>
>>>>>     on Mon, 17 Dec 2007 09:36:48 -0500 writes:

    DM> On 12/17/2007 9:06 AM, Oleg Sklyar wrote:
    >> Dear Patrick,
    >> 
    >> ?Firstly, and most importantly, I do not think that your post qualified
    >> for Rd! Please use the correct mail list for such things: R-help. I do
    >> not think anybody on Rd wants mailboxes ?clogged with irrelevant
    >> messages.

 { Oleg, you may have to be told that Pat Burns has been
   acquainted with the S language for a very long time, maybe
   about as long as you know to read... } 

    DM> Since Patrick's message was about changes to the documentation, I think 
    DM> it is relevant to this list.

yes indeed!
And the technicality of the discussion further down
is another good reason.

    DM> Duncan Murdoch

    >> Back to your question: it is not clear if you are confused, or your
    >> 'user' is confused, but all three help pages look pretty clear and
    >> straight forward to me. Moreover,  I do not see any connection between
    >> attach and library, which you find logical:
    >> 
    >> - load - the general use of this one is to load external data sets, e.g.
    >> load serialised R object(s) (as the example shows). Until you load, you
    >> cannot use the object as it has no relation to the R session and can be
    >> e.g. a file sitting somewhere on a network
    >> 
    >> - attach - the general use of this one would be to access elements of a
    >> data set directly, without the data set name specifier and the accessor
    >> operator, such as $, thus as the help page states - it is used to add
    >> the data set to the search path (as the example shows). If you look at
    >> the example, you do not have to call attach to be able to use data, data
    >> could have existed there before and what you effectively get with attach
    >> is a more convenient way of dealing with the data
    >> 
    >> - library - is used to load *and* attach an R package, which is not
    >> exactly the same as a serialised R object(s), but a full set of other
    >> functionality. Attaching packages is just a part of the loading process,
    >> which occurs basically when the package becomes visible to the user.
    >> Same as with load, you cannot use the package until you load it. There
    >> is not a hint of similarity between loading a package and attaching a
    >> data set as I see it. 

Hmm, I think there is, ..... and there's more :

The function load() is well known for loading R objects into the
global environment; well known, easy to understand.  However, it
can load into any other environment; and environments are the
crucial entities here.
BUT  when talking about loading in the context of R packages *and*
namespaces (!), there are other things:

One important point I think was not mentioned yet, and is probably *the*
reason of potential confusion of useRs and even programmeRs: here

  library(<package>)  does conceptually two things

  1) it *loads* the (exported) objects from the installed package
      (or with lazy-loading just loads "stubs") into a new environment.
  2) it "attaches" the names of those objects to the search() path

where things happen a bit differently for namespaced and other
packages.
For namespaced packages the two steps are really nicely
separable on a user level:  I hope you've known
loadNamespace(), unloadNamespace(), attachNamespace() and the
fact that e.g. cluster::pam() loads cluster's package namespace 
but does not attach cluster to search().

 { If you want to delve and hence to look at the library()
   function, please do so in the sources, e.g.,
      https://svn.r-project.org/R/trunk/src/library/base/R/library.R
   which has many comments that are all gone in the 'library' function object.
 }

I'd say: Because the loading part is the more delicate one than the
attach one, help(library) talks more about loading the package
than attaching..

Regards, Martin

    >> Regards,
    >> Oleg
    >> 
    >> On Mon, 2007-12-17 at 11:00 +0000, Patrick Burns wrote:
    >>> I recently had a discussion with a user about loading
    >>> and attaching in R.  I was surprised that the help files
    >>> don't  provide a very clear picture.
    >>> 
    >>> From my point of view 'load' and 'attach' are very
    >>> similar operations, the difference being that 'attach'
    >>> creates a new database on the search list while 'load'
    >>> puts all the objects into the global environment.
    >>> 
    >>> The help file for 'load' is inexplicit that this is what
    >>> happens.  The 'load' and 'attach' help files neither refer
    >>> to the other in their See Also.
    >>> 
    >>> Furthermore, the 'library' help file talks about "loading"
    >>> packages.  I would suggest that it should use "attaching"
    >>> as that is the analogous operation.
    >>> 
    >>> None of these three help files (nor that of 'save') has a
    >>> Side Effects section.  Personally I think that all help files
    >>> should have a Side Effects section (to make it clear to
    >>> new users what side effects are and that they are not a
    >>> good thing for most functions to have).  I can understand
    >>> there could be another point of view on that.  However, I
    >>> definitely think that there should be a Side Effects section
    >>> in the help files of functions whose whole point is a side
    >>> effect.
    >>> 
    >>> Patrick Burns
    >>> patrick at burns-stat.com
    >>> +44 (0)20 8525 0696
    >>> http://www.burns-stat.com
    >>> (home of S Poetry and "A Guide for the Unwilling S User")
    >>> 
    >>> ______________________________________________
    >>> R-devel at r-project.org mailing list
    >>> https://stat.ethz.ch/mailman/listinfo/r-devel

    DM> ______________________________________________
    DM> R-devel at r-project.org mailing list
    DM> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] help files for load and related functions
Martin Maechler