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