建立和分發包
這是一個關於如何從程式碼中快速建立 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
。欄位 Package
,Version
,License
,Description
,Title
,Author
和 Maintainer
是強制性的,另一個是可選的。
如果你的包依賴於其他包,請在名為 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。