"no visible binding for global variable" and with() vs. within()
I'm dealing with these type of false NOTEs as:
foo1 <- function (bar) {
# To please R CMD check
x <- NULL; rm(list="x")
with(bar, {
x })
}
Of course, that may one day break with more clever code inspections.
My $.02
/Henrik
On Fri, Aug 22, 2014 at 2:40 AM, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:
Rolf Turner <r.turner at 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 at 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.