建立和分發包

這是一個關於如何從程式碼中快速建立 R 包的簡明指南。詳盡的檔案將在可用時連結,如果你想要了解情況,應閱讀。有關更多資源,請參閱備註

你的程式碼所在的目錄將被稱為 ./,並且所有命令都是從該資料夾中的 R 提示符執行的。

建立文件

程式碼的文件必須採用與 LaTeX 非常相似的格式。

但是,我們將使用名為 roxygen 的工具來簡化流程:

install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")

roxygen 的完整手冊頁可在此處獲得 。它與 doxygen 非常相似。

這是一個關於如何使用 roxygen 記錄函式的實用示例 :

#' Increment a variable.
#'
#' Note that the behavior of this function
#' is undefined if `x` is not of class `numeric`.
#'
#' @export
#' @author  another guy
#' @name    Increment Function
#' @title   increment
#'
#' @param x   Variable to increment
#' @return    `x` incremented of 1
#'
#' @seealso   `other_function`
#'
#' @examples
#' increment(3)
#' > 4
increment <- function(x) {
  return (x+1)
}

而且,這裡將是這個結果

還建議建立一個小插圖(請參閱建立小插圖主題 ),這是有關你的包的完整指南。

包骨架的構造

假設你的程式碼是在檔案 ./script1.R./script2.R 中編寫的,請啟動以下命令以建立包的檔案樹:

package.skeleton(name="MyPackage", code_files=c("script1.R","script2.R"))

然後刪除 ./MyPackage/man/中的所有檔案。你現在要編譯文件:

roxygenize("MyPackage")

你還應該從 ./中啟動的命令提示符中使用 R CMD Rd2pdf MyPackage 從文件中生成參考手冊。

包屬性的版本

1.包裝說明

根據你的需要修改 ./MyPackage/DESCRIPTION。欄位 PackageVersionLicenseDescriptionTitleAuthorMaintainer 是強制性的,另一個是可選的。

如果你的包依賴於其他包,請在名為 Depends(R 版本<3.2.0)或 Imports(R 版本> 3.2.0)的欄位中指定它們。

2.可選資料夾

一旦你啟動了骨架構建,./MyPackage/只有 R/man/子資料夾。但是,它可以有其他一些:

  • data/:在這裡你可以放置你的庫需要的資料,而不是程式碼。它必須儲存為帶有 .RData 副檔名的資料集,你可以在執行時使用 data()load() 載入它
  • tests/:此資料夾中的所有程式碼檔案都將在安裝時執行。如果有任何錯誤,安裝將失敗。
  • src/:你需要的 C / C++ / Fortran 原始檔(使用 Rcpp …)。
  • exec/:用於其他可執行檔案。
  • misc/:幾乎沒有其他的東西。

完成並構建

你可以刪除 ./MyPackage/Read-and-delete-me

就像現在一樣,你的包已準備好安裝。

你可以用 devtools::install("MyPackage") 安裝它。

要將包構建為源 tarball,需要從 ./中的命令提示符執行以下命令 :R CMD build MyPackage

分發你的包裹

通過 Github

只需建立一個名為 MyPackage 的新儲存庫,並將 MyPackage/中的所有內容上傳到主分支。這是一個例子

然後任何人都可以使用 devtools 從 github 安裝你的軟體包:

install_package("MyPackage", "your_github_usename")

通過 CRAN

你的包需要遵守 CRAN 儲存庫策略 。包括但不限於:你的包必須是跨平臺(除了一些非常特殊的情況),它應該通過 R CMD check 測試。

這是提交表格 。你必須上傳源 tarball。