[英]How to include an HTML vignette in a binary R package
我為內部目的編寫了一個 R 包,還添加了一些小插曲。 當我使用devtools::install(build_vignettes = TRUE)
,所有小插圖都正確安裝在我的機器上。 但是為了將包分發給大學,我想生成一個 Windows 二進制文件。
但是當我從 RStudio Build 窗格使用Build binary package時,從生成的二進制文件安裝包時不會顯示小插圖。 我想我可以在構建二進制包之前將小插圖從doc
移動到inst/doc
,但這需要在小插圖更改時手動完成。
從R CMD INSTALL --help
我無法確定是否有包括構建小插圖的選項。
有沒有比手動將文件從doc
復制到inst/doc
更好的選擇?
我已經嘗試過devtools::build_vignettes()
。 這是控制台中的輸出:
> devtools::build_vignettes()
Building archivR vignettes
Moving vig1.html, vig2.html, vig1.R, vig2.R to doc/
Copying vig1.Rmd, vig2.Rmd to doc/
Building vignette index
它說文件被復制到doc/
。 它們不會出現在inst/doc
。
如果你使用
devtools::build()
devtools::build("../package_name.tar.gz", binary=TRUE)
然后小插曲將首先構建到 tar.gz 文件中,然后再構建到二進制文件中。
無需移動任何文件
我也一直在為同樣的問題而苦苦掙扎。
devtools::build_vignettes()
將結果放在inst/doc
(例如,按照此處最后一個要點中的建議)。devtools::build_vignettes()
現在將結果放在doc
(具體更改似乎在此處)。 與此提交相關的問題中給出了此更改的原因。 我找不到僅使用devtools
完成先前工作流程的方法,因此我使用了以下代碼。 它將覆蓋已經在inst/doc
或inst/Meta
任何文件。
build_vignettes_to_inst <- function() {
devtools::build_vignettes() # Builds vignettes to 'doc' and 'Meta'. Updates '.gitignore'.
unlink(c("inst/doc", "inst/Meta"), recursive = TRUE) # Remove the directories if they exist
dir.create("inst/doc"); dir.create("inst/Meta") # Create empty directories
has_worked <- c( # Copy files to 'inst' subfolders
file.copy(list.files("doc", full.names = TRUE), to = "inst/doc")
, file.copy(list.files("Meta", full.names = TRUE), to = "inst/Meta")
)
unlink(c("doc", "Meta"), recursive = TRUE) # Optional: Remove unwanted directories
return(all(has_worked)) # Returns TRUE if everything worked OK
}
build_vignettes_to_inst() # Call the function
您現在可以使用binary = TRUE
調用devtools::build()
,它將包含構建的(即 HTML)小插曲。
僅供參考:
最可靠的方法是構建一個源包(.tar.gz 文件),然后使用命令工具而不是 RStudio 來構建二進制文件。 如果您位於可以找到源包的目錄中,則可以在命令行中使用以下命令(前提是 R 在您的 PATH 中):
R CMD INSTALL --build pkgname_x.y.z.tar.gz
pkgname_x.yztar.gz
是包含源包的 tar 文件的名稱。
請注意,如果您希望正確添加小插圖,您應該首先創建源包並從源包構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.