R包中的内部对象存储位置在哪?重构R包找不到变量定义如何解决
R包内部未公开变量查找方案
- 优先查找
R/sysdata.rda文件:R包约定将不需要对外导出、仅内部使用的小数据集存储在该文件中,该文件不属于data目录,静态全局搜索源代码不会匹配到内部存储的变量名。你可以运行load("R/sysdata.rda")加载该文件,查看包含的对象,bar大概率存储在此处,你将变量重命名为foo后重新覆盖保存该文件即可。 - 检查包的启动钩子脚本:查看
R/zzz.R或其他包含.onLoad、.onAttach钩子函数的R脚本,部分开发者会在包加载时动态生成内部变量,直接写入包命名空间环境,这类变量不会出现在静态源代码中,全局搜索自然无结果。 - 可通过内置命令直接定位变量来源:运行
getAnywhere(bar)即可直接输出该变量的定义位置,同时运行ls(getNamespace("pkgname"), all.names = TRUE)可以列出当前包命名空间内的所有对象,包含未公开的内部变量。 - 注意环境混淆问题:你当前可以正常访问
pkgname:::bar,大概率是本地已经安装过旧版本的包,调用的是已安装版本的旧变量,而非当前开发目录下的修改版。你可以先运行remove.packages("pkgname")卸载旧版本,再运行devtools::load_all()加载本地开发版本验证修改结果,确认无误后再执行devtools::check()。
内容的提问来源于stack exchange,提问作者AnjaM
相关产品推荐
相关产品推荐

