这个套餐在一系列会议上逃离了我们对我们的理解R.作为编程语言,并与其他感兴趣的人联系R.软件开发。它适合已经知道的人R.,并且渴望在解决更大的项目时更深入地了解语言和“最佳实践”。
本次会议的主要目标是写一个R.包装,并使用GitHub.版本控制。
一个R.包只不过是磁盘文件夹包含特定文件和文件夹。最小的软件包包含
描述
具有元数据的文件(例如,标题,作者,描述,许可证,包依赖项)。命名空间
文件。命名空间文件描述导入的包,函数,方法和类(由)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
通常,人们会编辑文件:
实际上可以安装和加载包装,例如,使用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存储库。
将包添加到存储库时,有两个重要步骤。
git提交......
。一个经常使许多提交到本地存储库,或许在产生每种有意义的代码之后 - 例如,每小时几次。git推...
。这通常与概念特征的完成相关联,或者在一天结束时。R.包装通常包括R.职能。要为您的包添加功能,
R.
在 - 的里面elbo.
目录hi.r.
在 - 的里面Elbo / 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.。此块中的第一行成为帮助页面标题。下一段是描述
找到所有帮助页面。
@Param.
标签用于定义参数,例如,WHO
参数应该是1个字符向量等。@返回
描述函数的返回值。@例子
开始R.将包含在的代码例子
男人的一部分。@出口
表示函数将从包中导出,因此对用户可见。我们现在准备好编译了文档
Devtools :: Document(PKG)
并安装更新的包
devtools ::安装(PKG)
加载(如有必要)新安装的包并查看功能
图书馆(eLbo)头(搜索())ls(pos = 2)hi(“martin”)
还查看我们的文档
?你好
我们做了一些改变,所以......
## 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)
。这些方法的实力和弱点是什么?