繁体   English   中英

如何在包dev中打开的项目上自动加载和附加导入的函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM