[R] "no visible binding for global variable" and with() vs. within()

Duncan Murdoch murdoch.duncan at gmail.com
Sun Aug 17 13:05:52 CEST 2014


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().

Duncan Murdoch

> 
> R version 3.1.1 (2014-07-10)
> Platform: x86_64-apple-darwin10.8.0 (64-bit)
> 
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
> 
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> 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