>>>>> Rolf Turner <r.tur...@auckland.ac.nz> >>>>> on Mon, 18 Aug 2014 08:47:36 +1200 writes:
> 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") Yes, but that would be a quite bad idea, IMHO: The checking code {from package 'codetools' BTW} would no longer warn you about any accidental global 'x' variable in any of your functions in your package. After all, these codetools checks *are* very helpful in detecting typos and thinkos. Consequently, I'd strongly advise to only use globalVariables(.) on *rare* variable names. Martin Maechler, ETH Zurich ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.