创建和分发包

这是一个关于如何从代码中快速创建 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。