From wolfgang.viechtbauer at maastrichtuniversity.nl  Mon Sep 29 10:32:05 2014
From: wolfgang.viechtbauer at maastrichtuniversity.nl (Viechtbauer Wolfgang (STAT))
Date: Mon, 29 Sep 2014 10:32:05 +0200
Subject: [Rd] Using requireNamespace() instead of require()
In-Reply-To: <54280BC3.3070909@stats.ox.ac.uk>
References: <077E31A57DA26E46AB0D493C9966AC730DCCF99AE3@UM-MAIL4112.unimaas.nl>
	<54280884.6050700@gmail.com> <54280BC3.3070909@stats.ox.ac.uk>
Message-ID: <077E31A57DA26E46AB0D493C9966AC730DCCF99C17@UM-MAIL4112.unimaas.nl>

Thanks for the quick and clear responses. Indeed, I am not the maintainer of pkgB. And I figured that the solution lies in changes being made to pkgB. Hopefully the package author will be responsive.

Best,
Wolfgang

> -----Original Message-----
> From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
> Sent: Sunday, September 28, 2014 15:23
> To: Duncan Murdoch; Viechtbauer Wolfgang (STAT); r-devel at r-project.org
> Subject: Re: [Rd] Using requireNamespace() instead of require()
> 
> On 28/09/2014 14:09, Duncan Murdoch wrote:
> > On 28/09/2014, 8:47 AM, Viechtbauer Wolfgang (STAT) wrote:
> >> Suppose I have a function funcA() in package pkgA that requires
> function funcB() from another package pkgB under certain circumstances.
> Those circumstances are rare though, so I put package pkgB under
> 'Suggests', and use this in funcA() when those circumstances do arise:
> >>
> >> if (require("pkgB", quietly=TRUE)) {
> >>     pkgB::funcB(...)
> >> } else {
> >>     stop("Please install package 'pkgB' to do this.")
> >> }
> >>
> >> I understand that using requireNamespace() would be preferable and I
> would also prefer to do that. But funcB() depends on funcC() from pkgC
> that it lists under 'Depends'. So, with require("pkgB"), both namespaces
> (of pkgB and pkgC) are loaded and attached to the search list and things
> run. But with requireNamespace("pkgB"), only the namespace of pkgB is
> loaded, so funcC() can't be found. So, I figured, I also use
> requireNamespace("pkgC"), but that's not sufficient, since funcB() calls
> funcC() and not pkgC::funcC().
> >>
> >> Is there any solution to this?
> >
> > The solution needs to be implemented by the maintainer of pkgB.  It
> > probably doesn't really need pkgC on the search list, and could be
> > modified to import funcC or explicitly call pkgC::funcC.
> >
> > If you aren't the maintainer of pkgB, and the real maintainer is
> > unresponsive, then you're stuck using require().
> 
> I was writing something very similar, but added
> 
> 'If the maintainer of pkgB does not respond you probably do not want to
> rely on his work, not least because repository admins also will not get
> a response from him.'
> 
> >
> > Duncan Murdoch
> 
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Emeritus Professor of Applied Statistics, University of Oxford
> 1 South Parks Road, Oxford OX1 3TG, UK



[Rd] Using requireNamespace() instead of require()
Viechtbauer Wolfgang (STAT