R 加载包时加载数据对象

R 加载包时加载数据对象,r,R,是否有一种方法可以在加载包(但尚未连接)时自动从内存中的包加载数据对象?即,与延迟加载相反?该对象用于其中一个包函数,因此它需要随时可用 当包设置为lazydata=false时,包根本不会导出数据对象,需要使用data()手动加载数据对象。我们可以使用类似于: .onLoad <- function(lib, pkg){ data(mydata, package = pkg) } 但这将导致一个用于大型数据对象的大型packagedb,我不确定这会产生什么后果 我将发布这篇文章,因

是否有一种方法可以在加载包(但尚未连接)时自动从内存中的包加载
数据
对象?即,与延迟加载相反?该对象用于其中一个包函数,因此它需要随时可用

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

.onLoad <- function(lib, pkg){
  data(mydata, package = pkg)
}

但这将导致一个用于大型数据对象的大型packagedb,我不确定这会产生什么后果

我将发布这篇文章,因为它似乎适用于我的用例

.onLoad()
是:

 function(lib,pkg)
    data(mydata, package=pkg, 
           environment=parent.env(environment()))
还需要
导入
说明中的utils
命名空间中的importFrom(utils,data)
才能通过R CMD检查

在我的例子中,我不需要数据对象对用户可见,我需要它对包中的一个函数可见。如果你需要它对用户可见,那就更难了(我想),因为据我所知,你不能导出数据,只能导出函数。我想到的导出数据的唯一方法是导出数据的包装函数。

如您所说

该对象用于其中一个包函数,因此它需要随时可用

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


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

我非常想知道答案!我正在使用
nloptr
包,它在一个函数中使用包数据,因此在加载包但未附加包时不起作用……您是否可以在
.onLoad
文件中使用
数据(mydata,package=pkg,environment=parent.env(environment())
。虽然感觉有点不舒服。例如,当lazydata=true时,R将在附加包时用自己的版本覆盖mydata对象。此外,数据对象对用户不自动可见;您需要手动导出它。如果您有
.Rprofile
,您可以尝试
If
语句或函数。如果使用此解决方案,请确保不要设置
lazyData=true
,因为一旦附加包,R将用自己的版本覆盖
mydata
。我不确定我是否理解这里的问题(可能它不适用于我的用例?),但我会考虑一下……如果数据对包可见但对用户不可见,那么您应该使用
sysdata.rda
而不是
data/
 function(lib,pkg)
    data(mydata, package=pkg, 
           environment=parent.env(environment()))