[R-pkg-devel] CRAN packages suggesting other packages but not using them conditionally

Spencer Graves @pencer@gr@ve@ @end|ng |rom e||ect|vede|en@e@org
Sat Dec 12 20:19:24 CET 2020


	  I have tests in my code to detect when something like that is not 
available.


	  I also have code in "\examples" to skip tests that would encounter 
that.


	  Hadley's "testthhat:skip_on_cran" is supposed to suppress tests like 
that on CRAN.  I have so far failed to understand how to use this 
function that Hadley wrote.  Instead, I use things like the following:


if(!fda::CRAN()){
# Code that I want to run everyplace that's NOT CRAN


}


	  When I wrote "fda::CRAN", I was told that I shouldn't do it, but I 
didn't see a better option, and I've been using it for several years now 
without being given a reason to discontinue using it or (better?) being 
given an alternative that seems better to me.


	  Spencer


On 2020-12-12 12:40, Michael L Friendly wrote:
> Thanks, Dirk
> 
> Just to clarify--
> In my packages, candisc, heplots, vcdExtra I have mostly 2D graphic methods, but some 3D methods that use
> rgl.  I therefore put rgl into Suggests:
> 
> Could I solve this by making rgl a Depends: ?
> 
> -Michael
> 
> 
> -----Original Message-----
> From: Dirk Eddelbuettel <edd using debian.org>
> Sent: Saturday, December 12, 2020 12:46 PM
> To: Michael L Friendly <friendly using yorku.ca>
> Cc: r-package-devel using R-project.org; Prof Brian Ripley <ripley using stats.ox.ac.uk>
> Subject: Re: [R-pkg-devel] CRAN packages suggesting other packages but not using them conditionally
> 
> 
> On 12 December 2020 at 16:24, Michael L Friendly wrote:
> | I got the email below concerning 3 of my packages but wonder if they
> | are false alarms or if not, how to locate & fix the problem.
> |
> |     This concerns packages: ...
> |
> |     Suggested packages should be used conditionally: see  1.1.3.1 of 'Writing R Extensions'.  Some of these are hard to install on a platform without X11 such as M1 Macs: see the logs at https://www.stats.ox.ac.uk/pub/bdr/M1mac/.
> |
> |     You can check all of the suggested packages by setting environment variable _R_CHECK_DEPENDS_ONLY_=true  -- see https://cran.r-project.org/doc/manuals/r-devel/R-ints.html#Tools .
> |
> | Is this a false alarm?
> |
> | In each case, the outfile contains:
> |
> |     * checking package namespace information ... OK
> |     * checking package dependencies ... NOTE
> |     Package suggested but not available for checking: 'rgl'
> |
> | indicating that rgl is not avaiable on the testing machine.  Then,
> | when checking examples an error is triggered when an example calls something that requires rgl.
> |
> |     >
> |     > heplot3d(Adopted.mod, hypotheses=list("Reg"=c("AMED", "BMIQ")),
> |     +         col = c("red", "blue", "black", "gray"), wire=FALSE)
> |     Loading required namespace: rgl
> |     Failed with error:  'there is no package called 'rgl''
> |     Error in heplot3d.mlm(Adopted.mod, hypotheses = list(Reg = c("AMED", "BMIQ")),  :
> |       rgl package is required.
> |     Calls: heplot3d -> heplot3d.mlm
> |     Execution halted
> |
> | Yet, heplot3d seems to contain the required way to refer to the suggested rgl package:
> |
> |                 if (!requireNamespace("rgl")) stop("rgl package is
> | required.")
> |
> | So, I'm mystified.  Can anyone help?
> 
> This is not conditional use in the sense of my reading of WRE.
> 
> What you have here is essentially an "assert()" and equivalent to
>    stopifnot(requireNamespace("rgl"))
> which, in turn, is equivalent to a strong Depends or Imports as your package will experience a _critical error_ triggered by `stop()` if rgl is missing.
> 
> The idea of a conditional use is to, well, be conditional. Below I make use of Rcpp if is present, but it is only a suggests:
> 
>    ## see the source files in the snippets/ directory of the package
>    ## check for (optional, only in Suggests:) Rcpp, and also wrapped in a
>    ## dontrun as it takes 10s at CRAN (yet only 3.5 here) yielding a NOTE
>    if (requireNamespace("Rcpp", quietly=TRUE)) {
>        Rcpp::sourceCpp(system.file("snippets", "convolveExample.cpp", package="tidyCpp"))
>    }
> 
> If the _suggested_ package is present, it is used. If not we quietly move on.
> (It's not the full story as the compilation occassionally takes longer, Windows complained so all this is now in a \dontrun{} block too. But the idea is generic and there are many more examples to be found.)
> 
> Hope this helps,  Dirk
> 
> --
> https://dirk.eddelbuettel.com | @eddelbuettel | edd using debian.org
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list