[英]How can I automatically load and attach imported functions on project open in package dev?
当我在我的电脑上打开A R 包装项目,我想自动加载并连接library()
所有这一切都在各自列出的软件包NAMESPACE
给定的包作为import()
S(未importFrom()
小号)。
这很有用,因为它使我可以更快地交互式评估代码。 否则,我会浪费时间处理诸如
glue("foo")
# Error in glue("foo") : could not find function "glue"
即使我的NAMESPACE
有胶水。
这不是什么大不了的事,几秒钟就刮光了一些挫败感。
请注意,这仅适用于程序包开发。 在非包装项目,我可以只需将library()
到我.Rprofile
,但这将是在封装,其中所述包中已经声明的情况下,多余的NAMESPACE
。
我的方法是在项目(和程序包)根目录下的.Rprofile
中添加以下内容:
if (Sys.getenv()["LOGNAME"] %in% c("foo_user", "bar_user")) {
message("I seem to be running on a dev machine, so I am doing some preparatory steps.")
imports <- devtools::parse_ns_file()$imports # capture all imports from namespace file
imports <- purrr::discard(.x = imports, .p = is.list) # only take the import(), not the importFrom() declarations.
purrr::walk(.x = imports, .f = library, character.only = TRUE)
}
这似乎是可行的方法吗?
更新 (已包含在上面)
这似乎有些CI系统(Appveyor)不喜欢devtools::...
)和其他呼叫.Rprofile
,或许是因为他们没有这个套装等可在任何阶段的建造周期.Rprofile
被称为(还早吗?)。 因此,将整个shebang包裹在if子句中以仅在本地dev机器上调用它似乎是明智的。
在macOS上, Sys.getenv()["LOGNAME"]
给出了简短的用户名,因此我使用它来标识我的开发机器。
让我知道是否有人有更好的主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.