[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
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
More information about the R-help
mailing list