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