有没有办法在加载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,我不确定这会带来什么后果.
正如你所说
该对象用于其中一个包函数中,因此它需要始终可用。
我认为该包的作者真的不应该使用data(.)它。相反,他应该通过 R/*.R 文件中的简单 R 代码或使用sysdata.rda所有这些问题的著名的第一个参考资料“编写 R 扩展”中解释的方法来
定义他的 /R/ 中的对象。在这两种情况下,包作者还可以导出其他用户通常需要的对象,就像您的情况一样。
当然,这需要您和软件包作者之间进行礼貌的对话,并且仅适用于该软件包的下一个版本。
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |