[R] "no visible binding for global variable" and with() vs. within()
Henrik Bengtsson
hb at biostat.ucsf.edu
Fri Aug 22 20:38:33 CEST 2014
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.
More information about the R-help
mailing list