[R] is *package* loaded

Martin Maechler maechler at stat.math.ethz.ch
Wed Sep 14 10:40:02 CEST 2005

>>>>> "Seth" == Seth Falcon <sfalcon at fhcrc.org>
>>>>>     on Tue, 13 Sep 2005 21:28:48 -0700 writes:

    Seth> On 13 Sep 2005, jfox at mcmaster.ca wrote:

    >> packageLoaded() may well be a bad name but loadedNamespaces() won't
    >> detect a package without a namespace. 

    Seth> Right, that's a problem.

    >> It therefore seemed safe to me to check the path, which would
    >> include both packages with and without namespaces. With respect to
    >> loading and attaching, I thought that library() both loaded a
    >> package (with or without a namespace) and attached it to the search
    >> path, 

that's correct.  But still your proposed function isn't doing
what its name suggests; so its name is really very misleading 
or "bad" as Robert said.
OTOH, the name could be quite good if it's implementation

packageLoaded <- function(name)
    ## Purpose: is package 'name' loaded?
    ## --------------------------------------------------
    (paste("package:", name, sep="") %in% search()) ||
    (name %in% loadedNamespaces())

    >> but I must admit that I'm easily confused about these distinctions.

    Seth> As I understand it, library(foo) will load and attach package "foo".


    Seth> If foo has a namespace, some of foo's dependencies may get loaded but
    Seth> not attached.  This is only possible if said dependencies also use
    Seth> namespaces.
    Seth> So it is possible for a package to be loaded and not attached.

Yes.  There's another maybe even more common case of package
loading without attaching:
e.g.  using   MASS::rlm(...)  anywhere in your code silently
loads the MASS package but doesn't attach it.

    Seth> In this case, the loaded package is not visible via search(), but is
    Seth> visible via loadedNamespaces() since only packages with namespaces can
    Seth> be loaded and not attached.

Further note that "package loading" is more than just loading the
exported R symbols from the namespace.  E.g., it also dyn.load()s
the ./src/ stuff [ such that in the example, MASS::rlm() can
work at all ].

    Seth> Clear as mud?

    Seth> HTH,

    Seth> + seth


More information about the R-help mailing list