我正在使用devtools处理我正在处理的包。
如果我运行R
然后运行
library(devtools)
devtools:::load_all()
我可以查看我的包文档。
但是,我正在尝试创建一个别名来自动启动R(它实际上是进入Makefile)。所以我用这两行创建了一个文件“load.R”,然后运行
R_PROFILE=load.R R
我正确加载了我的包(例如,我可以执行mypackage:::
并查看所有功能)但我无法访问我的帮助文件。
(如果我启动R并运行source("load.R")
我可以看到我的帮助文件,所以我确信这不是一个错字或其他愚蠢的东西。)
我认为这可能与load_all
电话的时间有关;我相信传递R_PROFILE
会在会话变为交互之前运行代码。所以,或者,有没有办法运行像
R -e 'source("load.R")'
并保持交互,而不是在代码终止后退出?
感谢。
答案 0 :(得分:0)
我自己找到了一个解决方案,虽然我很欣赏任何其他想法,因为我对这样的环境感到有点不舒服。
devtools
通过创建一个新的环境来定义help
和?
,这些新环境定义了可以查看我的包的帮助文件的函数版本,并附加了这个环境。当它以交互方式调用时,search()
堆栈已经填充了默认环境,特别是内置包package:utils
中的utils
环境(其中help
和存在?
。 attach
新环境时,它会被添加到search()
堆栈的顶部(仅在.GlobalEnv
后面。
但是,R_PROFILE的加载时间早于那些正在加载的基础软件包,因此在使用R_PROFILE=load.R
时,devtools
堆栈上的search()
环境较低,因此help
和{ {1}}坚持使用默认版本。
我的解决方案是将?
更新为
load.R
这会强制library(utils)
library(devtools)
load_all()
在utils
之前加载,以便环境顺序符合要求。