这个套餐在一系列会议上逃离了我们对我们的理解R.作为编程语言,并与其他感兴趣的人联系R.软件开发。它适合已经知道的人R.,并且渴望在解决更大的项目时更深入地了解语言和“最佳实践”。

第一个包

本次会议的主要目标是写一个R.包装,并使用GitHub.版本控制。

R.

一个R.包只不过是磁盘文件夹包含特定文件和文件夹。最小的软件包包含

  1. 文本描述具有元数据的文件(例如,标题,作者,描述,许可证,包依赖项)。
  2. 文本命名空间文件。命名空间文件描述导入的包,函数,方法和类(由)R.包中的代码。命名空间文件还指定包中定义的哪些函数,类,方法和数据是可见的。最小的命名空间文件包含nothing - 没有从其他包中使用符号,并且在程序包中没有定义的符号是可见的。

锻炼

创造几乎最小的R.包装使用devtools.功能创造。我们将在临时目录中创建Pacakge,但在永久性位置执行此操作。

pkg < -  file.path(tempdir(),“elbo”)devtools :: create(pkg,description = list(版本=“0.0.1”)))
##创建'/ tmp / rtmpffzu5a'中的包'eLbo'
##未找到描述。创建值:
##包:eLbo ##标题:包裹所做的(一行,标题案例)##版本:0.0.1 ##作者@ r:person(“first”,“last”,电子邮件=“first.last @example.com“,角色= c(”aut“,”cre“))##描述:包裹所做的(一个段落)。##取决于:R(> = 3.4.0)##许可证:它是什么许可证?##编码:UTF-8 ## lazydata:true
## *从模板创建`elbo.rproj`。
## *添加`.rproj.user`,`.rhistory`,`.rdata` ./.gitignore

查看目录的内容

dir(pkg,recursive = true)
## [1]“描述”“elbo.rproj”“命名空间”

elbo.rproj.文件用于使用rstudio.,是可选的。内容描述文件是

CAT(strwrap({ReadLines(file.path(pkg,“描述”))},Exdent = 4),SEP =“\ n”)
##包:eLbo ##标题:包裹所做的(一行,标题案例)##版本:0.0.1 ##作者@ R:Person(“First”,“Last”,Email = ##“。last@example.com“,角色= c(”aut“,”cre“))##描述:包的作用(一段)。##取决于:R(> = 3.4.0)##许可证:它是什么许可证?##编码:UTF-8 ## lazydata:true

通常,人们会编辑文件:

  • 标题:和描述:描述包的字段。
  • 作者@ R.:Field为枚举一个或多个作者提供了一个设施。
  • 版本:字段旨在随着包的每个更改递增;它允许用户和开发人员准确了解使用哪个版本2021欧洲杯体育投注开户的包。这生物体公约是使用格式x.y.z的形式使用版本,例如0.0.1,0.99.0,1.0.0,1.0.1
  • 许可证:字段用于描述Pacakge提供的条件;一个经常选择标准许可,例如'艺术-2.0'或'gpl 3'

实际上可以安装和加载包装,例如,使用devtools.

devtools ::安装(PKG)
##安装Elbo.
##'/ home / mtmorgan / bin / r-devel / bin / r'--no-site-file --no-environ --no-save \ ## --no-restore --quiet cmd安装'/TMP / RTMPFFZU5A / ELBO'\ ## --Library ='/ Home / MTMorgan / R / X86_64-PC-Linux-GNU-Library / 3.4-BioC-3.5'\ ## --install-Tests
##
图书馆(Elbo)

该包现在在搜索路径上(在第二位置)

头(搜索())
## [1]“.globalenv”包:eLbo“包装:roxygen2”## [4]“包:devtools”包:biocinstaller“包装:统计数据包”

但当然没有任何可用的符号

LS(POS = 2)
##字符(0)

版本控制

During software development, one wants to be able to make changes to a package in a way that allows one to easily record what one has done, to revert back to a previous ‘working’ version if one ends up going down the wrong path, and to share the package with colleagues.

版本控件启用每个对象。Git.是一个版本控制系统,它是特别有用的GitHub.网站。

我们创建的每个包都将被管理为GitHub存储库

将包添加到存储库时,有两个重要步骤。

  1. 犯罪到本地存储库,git提交......。一个经常使许多提交到本地存储库,或许在产生每种有意义的代码之后 - 例如,每小时几次。
  2. 一系列致力于github存储库git推...。这通常与概念特征的完成相关联,或者在一天结束时。

包装开发:第一个功能

R.包装通常包括R.职能。要为您的包添加功能,

DIR.CREATE(FILE.PATH(PKG,“R”))
##在Dir.Create中警告(file.path(pkg,“r”)):'/ tmp / rtmpffzu5a / elbo / r'##已经存在
file.create(file.path(pkg,“r”,“hi.r”))
## [1]真实

我们将添加以下功能hi.r.文件:

嗨< - 函数(谁){粘贴(“你好”,谁,“你有”,nchar(谁),“你的名字中的字母!”)}

常见的做法使用了Roxygen2.包以帮助文档和管理包中的函数。这个想法是使用函数之上的几行文本,使用诸如@Param.表示文档的不同部分。更新hi.r.包装,使用您选择的文本编辑器,如下所示:

#'帮助开始对话#'#'此函数生成一些可用的文本,可用于启动#“在各种尴尬的社交场合中的对话。#'#'@param who字符(1)你希望开始#'对话的人的名称。#'#'@return字符(1)开始对话时要使用的文本行。#'#'@examples#'嗨(“Martin Morgan”)#'#'@Export嗨< - 函数(谁){veree(“你好”,谁,“你有”,nchar(谁),“字母”你的名字!”) }
## [1]真实

从线路开始#'被认可Roxygen2.。此块中的第一行成为帮助页面标题。下一段是描述找到所有帮助页面。

我们现在准备好编译了文档

Devtools :: Document(PKG)

并安装更新的包

devtools ::安装(PKG)

加载(如有必要)新安装的包并查看功能

图书馆(eLbo)头(搜索())ls(pos = 2)hi(“martin”)

还查看我们的文档

?你好

版本控制!

我们做了一些改变,所以......

  • 更新版本号,例如,0.0.2
  • 将新文件添加到git
  • 审查变更
  • 提交所有已更改的文件,包括更新的描述文件
  • 将更改推向GitHub。
## CD eLbo ##更新版本中的更新版本Git添加R / Hi.R Git Diff Git Commit -A Git Push

这些操作也可通过rstudio.用户界面。

锻炼

添加选项如何这将喊(大写),耳语(小写),或者说(没有变化)用户名。将选项作为单独的函数实现。用match.arg()选择通信模式,和转变()返回创建返回句时要应用的函数。更新文档并将示例添加到手册页。

我的解决方案:

我实施了代码

嗨< - 函数(谁,如何= C(“说”,“喊”,“耳语”,“耳语”)){如何< -  match.arg(如何)有趣< - 交换机(如何,比如说=说,喊叫=呼喊,喊叫,呼喊,耳语=耳语)糊状物(“你好”,有趣(谁),“你有”,nchar(谁),“你姓名中的信件!”)说< - 函数(谁){谁喊叫< - 函数(谁){toupper(who)}耳语< - 函数(谁){toolower(谁)}

我通过添加一个来更新文档@Param.......

#'@param如何表现如何迎接熟悉。“说”#'(默认,没有变化),“呼喊”(大写),“耳语”(小写)

......并更新@例子

#'@examples#'嗨(“Martin Morgan”)#'嗨(“Martin Morgan”,“喊”)#'嗨(“Martin Morgan”,“耳语”)

更新并安装包,并测试它

DevTools :: Document(PKG)DevTools :: Install(PKG)示例(嗨)

查看和提交更改并推送到Github

##更新版本中的更新版本Git Diff Git Commit -A Git Push

锻炼

由于函数是对象R.,实施如何争论使它需要一个函数而不是性格(1)。这些方法的实力和弱点是什么?

单元测试和其他编程最佳实践