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()))