如何在R包中隐藏内部数据,仅供包内函数调用并简化用户操作?
R包内部私有数据配置与函数调用方案
问题1:添加仅包内可访问的私有数据
你之前用usethis/devtools创建公开数据的方式会把数据放到data/目录,导致用户能看到。要创建私有内部数据,按以下步骤操作:
- 确保目标数据对象(比如
ice_cream_flavours)已在包开发环境中准备好 - 在包根目录下运行命令:
devtools::use_data(ice_cream_flavours, internal = TRUE)
该命令会将数据保存到R/sysdata.rda文件中,此文件内的对象属于包的内部环境,不会被导出到用户可见的命名空间。用户输入fat_pats_tools::时,不会看到这些数据文件名。
问题2:包内函数引用内部数据
修改你的函数,直接在函数内部调用私有数据即可,无需用户传入。示例如下:
原函数:
ice_cream_detector_function <- function(user_data, my_df) { # 原函数逻辑 }
修改为:
ice_cream_detector_function <- function(user_data) { # 直接调用包内部的私有数据 my_df <- ice_cream_flavours # 原函数逻辑保持不变 }
由于ice_cream_flavours保存在包内部的sysdata.rda中,包内函数可直接访问该对象,R会自动在当前包的内部环境中查找。
如果要避免与全局环境同名对象冲突,也可以用包内部访问符:::明确引用:
my_df <- fat_pats_tools:::ice_cream_flavours
不过只要函数属于包的一部分,直接使用对象名就足够安全。
重新构建并安装包后,用户就能按期望的方式调用函数,且输入fat_pats_tools::时只会看到函数列表。
内容的提问来源于stack exchange,提问作者Fat Pat
相关产品推荐
相关产品推荐

