Message-ID: <8b81118e-f9b2-d050-1e5a-d997f6cd821d@gmail.com>
Date: 2019-04-29T23:59:39Z
From: Duncan Murdoch
Subject: [R-pkg-devel] check warning in examples
In-Reply-To: <VI1PR06MB4813F6377AD490EE894651AED5390@VI1PR06MB4813.eurprd06.prod.outlook.com>
On 29/04/2019 6:12 p.m., Berry Boessenkool wrote:
>
> Hi,
>
> my package has a warning in check (locally + all rhub::check_for_cran platforms):
>
> * checking for unstated dependencies in examples ... WARNING
> Warning: parse error in file 'berryFunctions-Ex.R':
> 'match' requires vector arguments
>
> When I run the -Ex.R file locally (Windows 10, R3.5.2), things work fine, however.
> parse("*-Ex.R") works fine.
> devtools::run_examples() works fine as well.
> https://github.com/brry/berryFunctions
>
> Does anybody have an idea how to locate the cause for such a warning?
> Does it mean something that this turns up in check unstated deps while checking examples itself has no problems?
It looks like a bug in the QC code, triggered by this line in one of
your examples for ?dataStr:
data(list=x$Call, package=x$Package, envir=env)
In the R-devel source file src/library/tools/R/QC.R, in function
.check_packages_used_helper(), there's a nested function called
find_bad_exprs(). It parses lots of calls, and in particular, in
handling calls to data(), it has this code:
if(Call %in% "data" && length(e) >= 3L) {
mc <- match.call(utils::data, e)
if(!is.null(pkg <- mc$package) && pkg %notin%
depends_suggests)
bad_data <<- c(bad_data, pkg)
}
Here e is the quoted expression from above, and Call is "data". This
sets pkg to the quoted expression x$package, and the test "pkg %notin%
depends_suggests" dies with the error message you saw.
I think the fix for this is to check that pkg works out to be a string,
not an expression, e.g.
if(!is.null(pkg <- mc$package) && is.character(pkg) && pkg %notin%
depends_suggests)
I'm not sure what would be the best thing for you to do. You could fool
the test by using obscure code like this
do.call("data", list(list = x$Call, package=x$Package, envir=env))
or maybe you could just ignore the warning, pointing out that it is a
bug in the QC code.
Duncan Murdoch