我正在尝试重用一些我已经编写过的代码,但经常需要为各种项目重新执行(IE我想将一些面向对象的原则应用到我的R代码中)。我知道存在一个用于在CRAN上发布新包的框架,但是我所拥有的代码对其他方来说并不重要。
基本上我想要创建我自己的本地软件包并使用require()调用或至少根据需要保存在单独的.r文件中的调用函数来引用它们。
我在网上搜索过,发现了一些关于创建包并使用RTools编译它们的冗长文章(我在Windows操作系统上),但由于我不是在编写C,这对我的简单目的来说似乎有些过分。为了提供我所指的示例,我有一个脚本可以从字符串数据中删除不需要的字符,我经常需要将其复制/粘贴到新脚本中;我不想这样做,宁愿做一些像require(myFunction)这样的事情。
有没有一种简单的方法可以解决这个问题,或者通过抓取RTools并在本地编译我的自定义函数来获得最佳服务?
答案 0 :(得分:3)
创建R包实际上非常简单。 link from Alex是我开始第一个包的方式。这是我必须给我的学生一个稍微简化的版本。 (注意:完全归功于原始博客文章的作者Hilary Parker。)
首先安装devtools和roxygen:
install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")
为您的功能创建一个新目录:
setwd("/path/to/parentdirectory")
create("mypackage")
将您的函数添加到R目录中名为anything.R的文件(或文件)中。该文件应如下所示,每个文件可以有一个函数,或多个:
mymeanfun <- function(x){
mean(x)
}
myfilterfun <- function(x, y){
filter(x, y)
}
现在您应该记录代码。您可以使用roxygen记录(和导入)。确保@import函数来自任何其他包,并@export您想要的函数。 Roxygen和devtools会处理其他所有事情(命名空间,需要等等),直到你变得更高级。其他一切都是可选的:
#' My Mean Function
#'
#' Takes the mean
#' @param x any default data type
#' @export
#' @examples
#' mymeanfun(c(1,2,3))
mymeanfun <- function(x){
mean(x)
}
#' My Filter Function
#'
#' Identical to dplyr::filter
#' @param x a data.frame
#' @export
#' @importFrom dplyr filter
myfilterfun <- function(x, y){
filter(x, y)
}
现在从您创建的目录中的roxygen2运行document()
:
setwd(".\mypackage")
document()
你现在正在运行 - 我建议把它放在github上并从那里安装:
install_github("yourgithubname/mypackage")
从那时起,您可以致电:
library(mypackage)
每次你需要你的功能时。
有关详细信息和更好的文档实践,请参阅Hadley's book