"no visible binding for global variable" and with() vs. within()
On 17/08/14 23:05, Duncan Murdoch wrote:
On 16/08/2014, 9:36 PM, Daniel Braithwaite wrote:
R CMD check does not object to this code when checking a package:
foo1 <- function (bar) {
with(bar, {
x })
}
but produces a warning:
foo2: no visible binding for global variable 'x'
in response to this:
foo2 <- function (bar) {
within(bar, {
x })
}
Is this an R bug, or at least, an inadvertent inconsistency? Here is
sessionInfo() from my machine, right after starting an interactive session:
I'm not sure, but I suspect it's an intentional inconsistency. The code that checks for use of globals can't do anything in with() or within() code, so bugs can slip by if you use those. I think with() had been around for a long time and was in wide use when that test was added, but within() is newer, and it was less disruptive to warn about it, so the warning has been left in. (I don't remember whether the test came before or after within() was introduced.) So if you want to avoid the warning, don't use within().
Or you could have a file, say "melvin.R", in the R directory of your
package, containing the line:
utils::globalVariables("x")
cheers,
Rolf
Rolf Turner Technical Editor ANZJS