2014-02-05 2 views
4

У меня есть файл helper.RData в моем inst/extdata, который содержит переменные и наборы данных, которые будут использоваться функциями в моем пакете, , но не предназначены для доступ к пользователю.R: Как lazyload переменные из inst/extdata в пакете R

я загрузить его в начале пакета с помощью:

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

Как файл большое это занимает совсем немного времени, и это особенно раздражает во время разработки (я использую довольно бабло функции load_all() из пакета devtools).

Я предпочел бы, чтобы он был ленивым загруженным, так что файл загружается только тогда, когда это действительно необходимо.

Как я могу это сделать?

ответ

3

Прежде чем вы сможете лениво загружать данные, вам необходимо сохранить переменные в базе данных, которая поддерживает ленивую загрузку.

Вы можете сделать это, используя функцию tools:::makeLazyLoadDB, а затем функцию lazyLoad.

Чтобы создать ленивую базу данных загрузки. Скажем, у вас есть переменные X и Y, то вы должны создать среду, которая содержит их:

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

рядом создании базы данных:

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

, конечно, вы можете изменить DBNAME.

Вы можете импортировать его в R используя lazyLoad("DBNAME").

+0

если есть лучший способ, я бы хотел его услышать! – lucacerone

+1

Я обнаружил функцию delayedAssign(), которая, по моему мнению, во многих случаях может быть хорошей альтернативой makeLazyLoadDB. – lucacerone

Смежные вопросы