Search code examples
rlazy-loadingdevtools

R: How to lazyload variables from inst/extdata in R package


I have a file helper.RData file in my inst/extdata that contains variables and datasets to be used by the functions in my package, but not meant to be accessed by the user.

I load it at the beginning of the package using:

load(system.file("extdata","helper.RData", package = "mypackage"))

As the file is big this takes quite a bit of time and it is especially annoying during development (I use quite a loot the function load_all() from the devtools package).

I would rather prefer to have it lazy loaded so that the file is loaded only when actually needed.

How can I do that?


Solution

  • Before being able to lazy-load your data you have to save your variables in a database that supports lazy load.

    You can do this using the function tools:::makeLazyLoadDB and later the function lazyLoad.

    To create the lazy load database. Say you have the variables X and Y, the you have to create an environment that contains them:

    e=new.env(parent=emptyenv())
    e$X = X
    e$Y = Y
    

    next you create the database:

    tools:::makeLazyLoadDB(e,"DBNAME")
    

    of course you can change DBNAME.

    You can the import it in R using lazyLoad("DBNAME").