# Using external data from within another package

If you make the error which I did, you will try to use the data (say, “pckgdata”) from another package (say, “pckg”) naively like this:

someFunc <- function() {
data(pckgdata)
foo <- pckgdata$whatever }  This will result in an error: someFunc: no visible binding for global variable ‘pckgdata’ someFunc : <anonymous>: no visible binding for global variable ‘pckgdata’ Undefined global functions or variables: pckgdata  Here is the solution (thanks to the comments from stackexchange: .myenv <- new.env(parent=emptyenv()) someFunc <- function() { data("pckgdata", package="pckg", envir=".myenv") foo <- .myenv$pckgdata$whatever }  Actually, let us load the object as soon as our package is loaded: .myenv <- new.env(parent=emptyenv()) .onLoad <- function(libname, pkgname){ data("pckgdata", package="pckg", envir=".myenv") } someFunc <- function() { foo <- .myenv$pckgdata$whatever }  Now any of the functions in our package can use the pckgdata, whenever. Note that we want to use .onLoad(), and not .onAttach() — the latter one is for such things as startup messages when the package is manually attached by the user. Alternatively, you can create your environment within the function itself: <br />someFunc <- function() { myenv <- new.env(parent=emptyenv()) data("pckgdata", package="pckg", envir="myenv") foo <- .myenv$pckgdata\$whatever
}


## 2 thoughts on “Using external data from within another package”

• Agreed! In this particular case, however, I considered reusing the object (you can also use .onLoad() to make sure that the object is available immediately to all functions that need it)