在R包开发中能否将数据集封装到函数中并导出该函数?
在R包开发中能否将数据集封装到函数中并导出该函数?
当然可以这么做!而且你的思路还挺巧妙的——通过闭包的方式,确实能让数据集只加载一次,而不是每次调用函数时都重新加载,这点想法很实用。
先看你给出的代码示例:
.f <- function(){ utils::data("my_dataset", envir = environment()) function(other_dataset){ some_function(my_dataset, other_dataset) } } export_fun <- .f()
逻辑说明
当你运行.f()的时候,它会立刻把my_dataset加载到自身的环境中,然后返回内部的那个函数也就是export_fun。这个export_fun会“记住”外层环境里的my_dataset,所以每次调用它时,都不需要再重复加载数据集,直接用已经加载好的版本,能有效提升调用效率。
关于导出export_fun
完全可以导出这个函数!如果你用roxygen2来管理包的文档和命名空间,只需要给export_fun加上@export标签就行;要是手动管理NAMESPACE文件,直接添加export(export_fun)语句就可以让用户在安装包后直接调用这个函数。
几个注意点
- 要确保
my_dataset被正确包含在包中:把它放在包的data/目录下,同时在DESCRIPTION文件里做好相关配置,这样包安装时数据集能被正确部署。 - 内存占用问题:如果
my_dataset体积很大,包加载时因为export_fun会被初始化,数据集会一直驻留在内存中。如果你的用户并非时刻需要用到这个数据集,或许可以考虑延迟加载的替代方案,但如果export_fun必须依赖这个数据集,那你的方法就非常合适。
备注:内容来源于stack exchange,提问作者det
相关产品推荐
相关产品推荐

