Skip to content
Prev 77184 / 398502 Next

is *package* loaded


        
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
changed:

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".

correct

    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.

Indeed.
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

Martin