[Rd] improve 'package not installed' load errors?

Duncan Murdoch
Mon, 24 Oct 2016 18:54:16 -0000

On 24/10/2016 1:51 PM, Kevin Ushey wrote:
> Hi R-devel,
>
> One of the more common issues that new R users see, and become stumped
> by, is error messages during package load of the form:
>
> > library(ggplot2)
> Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()),
> versionCheck = vI[[j]]) :
>    there is no package called 'Rcpp'
> Error: package or namespace load failed for 'ggplot2'
>
> Typically, error messages of this form are caused simply by one or
> more dependent packages (in this case, 'Rcpp') not being installed
or
> available on the current library paths. (A side question, which I do
> not know the answer to, is how users get themselves into this state.)

I think one way to get here is to be running with several libraries.
You install ggplot2 while Rcpp is available, but in a different part of
the .libPaths list, then in a later session try to use it with a
different .libPaths setting.
>
> I believe it would be helpful for new users if the error message
> reported here was a bit more direct, e.g.
>
> > library(ggplot2)
> Error: 'ggplot2' depends on package 'Rcpp', but
'Rcpp' is not installed
> consider installing 'Rcpp' with install.packages("Rcpp")

The risk with this message is that Rcpp may really be installed, but
it's just not currently on .libPaths.  Detecting that situation and
reporting on it looks like it would be relatively hard:  it would mean
the ggplot2 installation needs to record where it found all
dependencies, and if at some later time it doesn't find one, see if that
location still exists and would still work (in which case the message
should suggest modifying .libPaths).  I think that's too much work.

Even a simple change like

Error: 'ggplot2' depends on package 'Rcpp', but 'Rcpp'
was not found


might not be easy (which function knows both names?)  However, if you
want to suggest a patch to implement this, I would take a look.

Duncan Murdoch

>
> In other words, it might be helpful to avoid printing the
> 'loadNamespace()' call on error (since it's mostly just scary /
> uninformative), and check up-front that the package is installed
> before attempting to call 'loadNamespace()'. I'm sure a number
of
> novice users will still just throw their hands up in the air and say
> "I don't know what to do", but I think this would help steer
a number
> of users in the right direction.
>
> (The prescription to suggest installing a package from CRAN if
> available might be a step too far, but I think making it more clear
> that the error is due to a missing dependent package would help.)