[R-pkg-devel] Handling Not-Always-Needed Dependencies?
Dirk Eddelbuettel
edd at debian.org
Tue Aug 2 21:39:06 CEST 2016
On 2 August 2016 at 11:00, Kevin Ushey wrote:
| You could abuse the LinkingTo: field of the DESCRIPTION file, to
| specify 'packages you want installed alongside your package that you
| won't necessarily use at runtime'. (It's possible that 'R CMD check'
| might warn about strange usages of LinkingTo:, but I'm not sure)
I'd rather not abuse LinkingTo: any further. I fear its feelings are
sufficiently hurt being mostly used for 'IncludeFrom:' and no linking.
Kidding aside I think we have room for new tags in DESCRIPTION. We may as
well do it right.
| You could also just place these packages in Suggests, but guard their
| usages with a function that attempts to download, install and load
| those packages. E.g. (pseudo-ish code)
|
| ensure_package_loaded <- function(package) {
| if (requireNamespace(package))
| return(TRUE)
Nice. [ And erratum in my previus email where I meant requireNamespace() ]
We could even go one further and store this in a per-package environment,
being filled through .onLoad() or .onAttach().
| if (interactive())
| # prompt user to download + install package, then try to load again
| stop("routine requires package but is not installed")
| }
I don't see why this should work only when interactive(). I think it should
work all the time.
I also don't think it needs to stop. It is after all just some auxiliary
functionality that Suggests provides. Eg extra regression tests, say with or
without a certain backend -- and those tests then need the yes/no toggle and
skip if unavailable.
| and use it as:
|
| uses_foo <- function() {
| ensure_package_loaded("foo")
| foo::bar()
| }
Sure.
| This would at least minimize the amount of time spent 'annoying' the
| user re: installation of package dependencies (it would only happen
| the first time they try to use those functions)
I don't really want other packages going off installing autonomously.
We pretty much make this explicit in DESCRIPTION so that the user can make an
informed choice.
| Overall, I think the best resolution here is through clever use of
| Suggests + on-demand installation of required packages, rather than
| adding another field to the DESCRIPTION file.
Wholly agreed on some part, less so on the remainders.
Dirk
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the R-package-devel
mailing list