加载包时加载数据对象

Jer*_*oen 5 r

有没有办法在加载data包(但尚未附加)时从内存中的包自动加载对象?即延迟装载的反面?该对象用于其中一个包函数,因此需要始终可用.

当程序包设置lazydata=false为时,程序包根本不会导出数据对象,需要手动加载data().我们可以使用类似的东西:

.onLoad <- function(lib, pkg){
  data(mydata, package = pkg)
}
Run Code Online (Sandbox Code Playgroud)

但是,data()在全局环境中加载对象.我更喜欢在包环境中加载它(这是lazydata所做的)以防止屏蔽冲突.

解决方法是data完全绕过机制,并简单地对包中的对象进行硬编码.因此包装myscore.R看起来像

mymodel <- readRDS("inst/mymodel.rds")
myscore <- function(newdata){
  predict(mymodel, newdata)
}
Run Code Online (Sandbox Code Playgroud)

但这将导致大型数据对象的巨大packagedb,我不确定这会带来什么后果.

Mar*_*ler 5

正如你所说

该对象用于其中一个包函数中,因此它需要始终可用。

我认为该包的作者真的应该使用data(.)它。相反,他应该通过 R/*.R 文件中的简单 R 代码或使用sysdata.rda所有这些问题的著名的第一个参考资料“编写 R 扩展”中解释的方法来 定义他的 /R/ 中的对象。在这两种情况下,包作者还可以导出其他用户通常需要的对象,就像您的情况一样。

当然,这需要您和软件包作者之间进行礼貌的对话,并且仅适用于该软件包的下一个版本。