簡體   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