Get specific object from Rdata file

.RData files don’t have an index (the contents are serialized as one big pairlist). You could hack a way to go through the pairlist and assign only entries you like, but it’s not easy since you can’t do it at the R level.

However, you can simply convert the .RData file into a lazy-load database which serializes each entry separately and creates an index. The nice thing is that the loading will be on-demand:

# convert .RData -> .rdb/.rdx
e = local({load("New.RData"); environment()})
tools:::makeLazyLoadDB(e, "New")

Loading the DB then only loads the index but not the contents. The contents are loaded as they are used:

lazyLoad("New")
ls()
x # if you had x in the New.RData it will be fetched now from New.rdb

Just like with load() you can specify an environment to load into so you don’t need to pollute the global workspace etc.

Leave a Comment