一、在电脑的那个位置创建自己的R包?
编写R包的第一步就是要知到在哪里可以写包,电脑的任何位置,只要能够创建文件夹的地方都可以写R包,但是文件的路径要是英文。简单的方法就是在DEF等盘下直接创建一个文件夹,命名为所要创建包的名字,如:E:ProgramDataMyRPackageFirstp
二、编写R包的架构以及整个流程。
一个R包就是由很多文件构成的集合,这里面既有函数,又有能够帮助读者理解的帮助文档,还有一些数据集,这是最基本的内容。所以说,写一个包就是把这些内容做完。在Firstp文件夹下创建R文件夹、UTF-8编码的文本文件。
1.打开Rstudio,新建脚本文件,保存至R文件夹下,文件以.R后缀结尾。
2.在s.R中创建函数:f<-function(x){return(x+1)}
3.添加帮助文档
首先,将光标移动到f之前,按下enter键,将函数下移几行
然后,在标记符号(井号和单引号)后面写帮助文档,export是必须的。
#' This is some descriptio of this function.
#' @title simple function
#'
#' @description today,I create my first function,a very usrful function.
#'
#' @details you can use this function to caculate x+1,then return the value of x+1.
#'
#' @param x x is a number
#'
#' @return a dataframe
#' @export
#' @examples x=1;f(x)
f<-function(x){return(x+1)}
4.写DESCREPTION,打开此文件,然后编写如下代码:
Package: Firstp
Type: Package
Title: This package is my first package created.
Version: 0.1.0
Date: 2020-03-23
Author: tang
Maintainer: BK
Description: I want to say something about my first package,but my mouth as if being frozen by a bock of ice.
License: GPL-3
encoding: UTF-8
LazyData: true
5.内置数据集:首先,在Firstp文件夹下建立于R文件夹同级的data文件夹,然后在Rstudio中建立数据集,用save函数将创建的数据集存储在data种,文件的后缀名为:.RData。
其次,在Rstudio中新建R脚本,保存在R文件夹中,命名为packagegename-data.R,这样R文件夹下就由两个R文件,打开packagegename-data.R并添加内置数据集并编写数据集的帮助文档。
就内置数据集而言,data文件夹是必须的,但是R文件夹下面的数据集帮助文档的命名有两种方式:一是和帮助文档中的数据集名称相同(都是td),二是用packagegename-data.R,但是个人觉得后者可能更好,因为万一数据名字写错,就尴尬了,后者就相当于万金油的写法。
6.使用roxygen2包中的roxygenize()函数来完成包的剩余部分,如生成具体的帮助文件等。
library(roxygen2)
roxygenize("E:/ProgramData/MyRPackage/Firstp")
7.检查和生成包:使用devtools包中的check和build函数。
声明:此时R的工作目录还是在C盘下,而我们的R包不在当前的R工作目录下,因此需要更改R的工作目录,具体代码如下:getwd()查看工作目录,setwd()更改工作目录,工作目录改到Firstp这个文件的上级文件夹,例如:MyRPackage中有Firstp,那么路径就设置为E:/ProgramData/MyRPackage。
getwd()
setwd("E:/ProgramData/MyRPackage")
然后使用devtools包中的check和build函数,先检查:
library(devtools)
check("Firstp")
然后生成R包:
8.安装包并使用
安装:直接将压缩包解压到R安装路径下的library中即可,如果这样不行就改用从Rstudio中安装的方法。
使用:library(Firstp)
查看帮助文档:
注意:就写包而言,这是一种比较原始的方法。
三、利用package.skeleton函数生成包的框架,然后进行修改,修改好之后直接用roxygenise()生成包的其他部分。
package.skeleton()的说明,"secondp"这个是包的名字;list = c("f")这个是包中函数的名字,如果一个包中有好几个函数,那么就写成list = c("f","g","t)的形式;path 包的路径,比如要在MyRPackage文件夹下生成一个包secondp包,那么这个路径就写成:path = "E:/ProgramData/MyRPackage"。
f<-function(x){return(x+1)}
package.skeleton("secondp",list = c("f"),path = "E:/ProgramData/MyRPackage")
这些文件要删除掉,不然会报错。
此时,便又回到了步骤二中开始的情形,那么之后的步骤便没有什么区别了。
四、编写包需要用到的工具包:
library(roxygen2)
library(devtools)
还有一个工具,Rtools,在安装是勾选配置环境变量就可以用了,即使忘记配环境变量也没关系,重新设置以下就好。检测Rtools是否配好可以打开命令提示符,然后直接在后面输入:R CMD Firstp。如果提示“既不是内部命令,也不是外部命令”那就说明环境变量没有配好。
五、使用命令提示符也可以检测和生成包,具体做法是:
1.将命令提示符切换到创建包的工作目录,cd E:ProgramDataMyRPackage 然后 E: 即可。
2.在后面直接输入输入:R CMD check Firstp即可。
六、在Rstudio的控制面板直接通过鼠标的方式创建包框架:
再把R文件夹的文件删除或者修改,这就类似于之前的步骤了,主要涉及的是R文件夹和DESCRIPTION文件。此外,使用devtool中的document函数也具有roxygenise()同样的作用,通过下面的语句可以实现帮助文档的生成、包的检查、生成。
library(devtools)
document("E:/ProgramData/MyRPackage/Firstp")
check("Firstp")
build("Firstp")
七、相关代码
1.DESCRIPTION文件中的代码:
Package: Firstp
Type: Package
Title: This package is my first package created.
Version: 0.1.0
Date: 2020-03-23
Author: tang
Maintainer: BK
Description: I want to say something about my first package,but my mouth as if being frozen by a bock of ice.
License: GPL-3
encoding: UTF-8
LazyData: true
2.R文件中的函数以及帮助文档代码:
#' This is some descriptio of this function.
#' @title simple function
#'
#' @description today,I create my first function,a very usrful function.
#'
#' @details you can use this function to caculate x+1,then return the value of x+1.
#'
#' @param x x is a number
#'
#' @return a dataframe
#' @export
#' @examples x=1;f(x)
f<-function(x){return(x+1)}
3.R文件中数据集帮助文档的代码:
#' @title somedata to test
#' @docType data
#' @name td
#' @keywords d dataset
#'
#'
4.生成数据集的代码:
d<-data.frame(c(1,2,3),c("a","b","c"))
colnames(d)<-c("id","name")
b<-c(1,2,3)
save(list = c("b","d"),file = "E:/ProgramData/MyRPackage/Firstp/data/td.RData")