[R] Warning when trying to access a variable out of scope?

Duncan Murdoch murdoch at stats.uwo.ca
Thu Jul 2 22:30:09 CEST 2009


On 7/2/2009 2:17 PM, Steve Lianoglou wrote:
> Hi,
> 
> I was wondering if I could get R to warn me, or give me a rude  
> awakening somehow, if I'm accessing a variable that is out of my  
> function's scope.
> 
> For example, often times I'm creating a function as I'm testing it in  
> the REPL, copying and pasting between both.
> 
> As a simple example, I might end up with a function like:
> 
> f <- function(a, b) {
>    a + b.test
> }
> 
> Where b.test was defined in my workspace as I'm mucking about in the  
> REPL, but "clearly" I should have written:
> 
> f <- function(a,b) {
>    a + b
> }
> 
> I could go on for a while in my session w/o noticing the problem  
> (since b.test is in my global env), and unbeknownst to me, my function  
> will keep accessing the "b.test" variable when I really want it to  
> work on the "b" var that I'm passing in to it.
> 
> Is there some setting or someway I can get R to warn me that "b.test"  
> is being accessed outside the scope of my function?

Not really, but the codetools package can analyze your functions and 
tell you which ones do things like that.  For example,

 > f <- function(a, b) {
+    a + b.test
+ }
 > checkUsage(f)
<anonymous>: no visible binding for global variable ‘b.test’

or

 > checkUsageEnv(globalenv())
f: no visible binding for global variable ‘b.test’

This is normally used in the package test code, but you can use it on 
individual functions or environments if you want.

Duncan Murdoch




More information about the R-help mailing list