[R] R CMD check: no visible binding for global variable

Rolf Turner rolf.turner at xtra.co.nz
Tue May 17 01:16:20 CEST 2011


On 17/05/11 06:05, swaraj basu wrote:
> Dear All,
>                I have built a package which has a data.frame "annotIndex.rda
> in its "data" folder.
>                I am using this data frame within two functions in my package.
>
>                Though my package works fine, yet when I do a
>                R CMD check
>
>                to my package I get the following two notes
>
>                get.affy.ensembl: no visible binding for global variable
> ‘annotIndex’
>                get.affy.id: no visible binding for global variable
> ‘annotIndex’
>
>                I need help in understanding these notes, and how can I avoid
> them.
This may be a case of the blind leading the blind, but here goes.

Understanding is simple (I think!). You are referring to an object 
"annotIndex"
inside a function, as in

foo <- function(x) {
x + annotIndex # Don't worry about the fact that this doesn't make sense!
}

When the package checker looks at this it says "Hmmmm, annotIndex has never
been defined (inside "foo") so it might not exist. There *could* be a 
problem here."

What to do about it: One solution is just to ignore the note; it's only 
a note,
not an error, nor even a warning, and you know that there isn't actually
a problem.

The solution that is often suggested --- see

RSiteSearch("{no visible binding}",restrict=c("Rhelp02","Rhelp08"))

of assigning annotIndex a value, e.g. annotIndex <- NULL, at the beginning
of your function doesn't work here since that local NULL value will 
over-ride the
global value that you really want.

You might try (the appropriate analogue of) x + 
get("annotIndex",envir=.GlobalEnv).

That should satisfy the package checker. (I haven't tested it, but.)

Dunno if this has an adverse impact on the efficiency of your code.

HTH

cheers,

Rolf Turner



More information about the R-help mailing list