可重复的生信分析之三:使用workflowr进行分析记录,数据共享

继上两篇推文,dockerconda的介绍之后,将会来到这个系列中最后一篇推文。本次推文的主要内容是,学习强大的R包workflowr,利用其进行可重复的生信分析,并且记录实验内容同时实现数据结果共享。

Workflowr的介绍

R包Workflowr结合了识字编程(knitr和rmarkdown)和版本控制(通过git2r的Git)来生成一个包含时间戳记,版本控制和文档化的结果的网页。任何R用户都可以快速轻松地使用它。其设计的初衷是助研究人员以促进有效的进行项目管理,可重复性的分析,同时进行协作和对结果进行共享。

简单来说Workflowr包含了三大特点:

  1. 容易管理
  • 提供了项目管理的模板
  • 使用R markdown 记录结果和编写的代码
  • 使用Git对结果和代表进行版本控制
  1. 具有可重复性
  • 示用于创建每个结果的代码版本
  • 每个分析在独立的R session中运行
  • 每个分析所使用的R session的信息会被记录
  1. 容易分享性
  • 对生成的结果使用网页化的形式进行展示
  • 通过GitHub来托管生成的网站
  • 旧版本的结果也会有相对应的链接

Workflowr的安装

为了让你跟上下列的教程,首先你要将Rstudio,Git还有pandoc这三个基本工具安装好。接着你要开通一个属于你自己的Github账号。

基本准备工作完成后,就可以开始下载R包Workflowr了。

install.packages("workflowr")

使用Workflowr开展新的项目

首先,打开你的R studio,然后加载workflowr

library("workflowr")
## This is workflowr version 1.6.1
## Run ?workflowr for help getting started

如果你以前从未在你电脑上创建过Git的存储库,则需要运行以下命令告诉Git你的用户名和电子邮件。Git使用此信息将你对代码所做的更改进行记录。另外,你只需要在每台电脑上运行一次此命令,随后的所有工作流项目都将使用此信息(你也可以随时通过重新运行该命令来随时对其进行更新)。

> wflow_git_config(user.name = "lakeseafly", user.email = "21230309@student.uwa.edu.au")
Current Git user.name:  lakeseafly
Current Git user.email: 21230309@student.uwa.edu.au
Other Git settings:

现在我们可以开始第一个工作项目了:

wflow_start("myproject")

这将会创建一个名为的目录myproject/,其中包含了不同的子目录,里面含有对应基本文件,并创建了一个初始的 Git repository。简单查看一下生成的文件:

myproject/
├── .gitignore
├── .Rprofile
├── _workflowr.yml
├── analysis/
│   ├── about.Rmd
│   ├── index.Rmd
│   ├── license.Rmd
│   └── _site.yml
├── code/
│   ├── README.md
├── data/
│   └── README.md
├── docs/
├── myproject.Rproj
├── output/
│   └── README.md
└── README.md

这时你已经有了一个含完整元素的工作流项目。也就是说,你拥有使用主要工作流程程序命令和发布研究网站所需的所有文件。

必需的两个子目录是analysis/docs/。这些目录绝对不能从工作流项目中删除。

  • analysis/:此目录包含用于执行项目数据分析的所有R Markdown源文件。它还包含一个特殊的R Markdown文件,index.Rmd该文件不包含任何R代码,但将用于生成index.html,你即将生成的网页主页。此外,该目录还包含重要的配置文件_site.yml,你可以使用该文件来编辑网页的主题,导航栏和其他网站外观。
  • docs/:此目录包含生成网页所需的所有HTML文件。HTML文件是根据中的R Markdown文件构建的analysis/。此外,R Markdown文件创建的任何图片都保存在这里。这些图的每一个都按照以下模式保存:docs/figure/<insert Rmd filename>/<insert chunk name>-#.png

该工作流程特定的配置文件是_workflowr.yml。它将对所有R Markdown文件一致地应用到工作流重复性检查。另外最关键的设置是knit_root_dir,通过修改其设置,能确定将在其中执行文件的目录是analysis/。默认设置是在项目的根目录_workflowr.yml(即".")中执行代码。要改为从analysis/中执行代码,请将设置更改为knit_root_dir: "analysis"

在可选的目录是data/,code/output/。这些目录是推荐用来更好的管理整个项目的,但是如果你觉得它们没有用,可以将其删除。

  • data/:此目录用于存储原始数据文件。
  • code/:此目录用于可能不适合以R Markdown格式的代码(例如,用于预处理数据或长时间运行的代码)。
  • output/:此目录用于处理的数据文件以及从代码和数据生成的其他输出。

该目录中的该.Rprofile文件是常规的R脚本,在打开项目时运行一次。它包含调用library("workflowr"),确保每次打开workflowr程序项目时自动加载工作流程序。

构建网页

你会注意到当前docs/的目录当前为空。那是因为我们还没有从这些analysis/文件中生成对应的网页。这就是我们下一步要做的事情:

wflow_build()
Current working directory: /Users/ricky/myproject
Building 3 file(s):
Building analysis/about.Rmd
Building analysis/index.Rmd
Building analysis/license.Rmd
Summary from wflow_build

Settings:
 make: TRUE

The following were built externally each in their own fresh R session: 

docs/about.html
docs/index.html
docs/license.html

Log files saved in /private/var/folders/33/nmxv8lqd3zg645dkr9s_5w8c0000gn/T/RtmpYlqh1c/workflowr

此命令将在其中构建所有R Markdown文件和analysis/相应的HTML文件保存在中docs/。最后,它在RStudioViewer或默认的Web浏览器中显示网页。

另外可以在不构建任何文件的情况下查看站点,请运行wflow_view(),默认情况下会显示该文件docs/index.html

wflow_view()

接下来可以通过修改index.Rmd,about.Rmd和license.Rmd,更加具体细致地描述你的项目。然后运行wflow_build()来重新构建HTML文件,并将其显示在RStudio Viewer或浏览器中。

发布网页

workflow在已发布和未发布的R Markdown文件之间做出了重要区分。在线的网页上已包含已发布的文件;相反,未发布的R Markdown文件的HTML文件只能在本地计算机上查看。由于该示例的项目才刚刚开始,所以没有发布的文件。要查看项目的状态,可以运行wflow_status()

wflow_status()
Status of 3 Rmd files

Totals:
 3 Unpublished

The following Rmd files require attention:

Unp analysis/about.Rmd
Unp analysis/index.Rmd
Unp analysis/license.Rmd

Key: Unp = Unpublished

The current Git status is: working directory clean

To publish your changes as part of your website, use `wflow_publish()`.
To commit your changes without publishing them yet, use `wflow_git_commit()`.

这提醒我们,我们的项目有3个R Markdown文件,并且它们都尚未发布(“ Unp”)的状态。此外,它还指导如何发布它们:第一个参数wflow_publish()是要发布的R Markdown文件的字符向量。第二个参数wflow_git_commit()是你还没有正式发布之前,你所做出改变的版本控制信息。一般来说,commit的信息越详细越好,以便日后我们可以查询为什么我们要做出这些更改。

这里我们尝试一下运行wflow_publish()

wflow_publish(c("analysis/index.Rmd", "analysis/about.Rmd", "analysis/license.Rmd"),"Publish the initial files for myproject")
Current working directory: /Users/ricky/myproject
Building 3 file(s):
Building analysis/index.Rmd
Building analysis/about.Rmd
Building analysis/license.Rmd
Summary from wflow_publish

**Step 1: Commit analysis files**

No files to commit


**Step 2: Build HTML files**

Summary from wflow_build

Settings:
 clean_fig_files: TRUE

The following were built externally each in their own fresh R session: 

docs/index.html
docs/about.html
docs/license.html

Log files saved in /var/folders/33/nmxv8lqd3zg645dkr9s_5w8c0000gn/T//RtmpYlqh1c/workflowr

**Step 3: Commit HTML files**

Summary from wflow_git_commit

The following was run: 

  $ git add docs/index.html docs/about.html docs/license.html docs/figure/index.Rmd docs/figure/about.Rmd docs/figure/license.Rmd docs/site_libs docs/.nojekyll 
  $ git commit -m "Build site." 

The following file(s) were included in commit 2bf51e9:
docs/about.html
docs/index.html
docs/license.html
docs/site_libs/bootstrap-3.3.5/
docs/site_libs/highlightjs-9.12.0/
docs/site_libs/jquery-1.11.3/
docs/site_libs/navigation-1.1/

简单解析一下,这一堆信息。wflow_publish() 这一命令主要执行了3个步骤:

  1. 使用自定义提交消息提交3个R Markdown文件
  2. 使用wflow_build()生成HTML文件
  3. 提交3个HTML文件以及指定网站样式的文件(例如CSS和JavaScript文件)

执行这3个步骤可确保HTML文件始终与R Markdown文件的最新版本同步。手动执行这些步骤将很繁琐且容易出错,但通过wflow_publish()可以轻松保持网站页面同步。

现在,当您运行时wflow_status(),它将报告所有文件都已发布并都是最新的。

wflow_status()
## Status of 3 Rmd files
## 
## Totals:
##  3 Published
## 
## The current Git status is: working directory clean
## 
## Rmd files are up-to-date

部署网站

现在我们已经建立了本地的版本控制网页。下一步是将代码放在GitHub上,以便我们可以让我们的网页在线。

所有必需的设置都可以通过工作流功能执行wflow_use_github()。唯一需要的参数是您的GitHub用户名:

wflow_use_github("yourname")
Summary from wflow_use_github():
account: lakeseafly
respository: myproject
* The website directory is already named docs/
* Output directory is already set to docs/
* Set remote "origin" to https://github.com/lakeseafly/myproject.git
* Added GitHub link to navigation bar
* Committed the changes to Git

To proceed, you have two options:

1. Have workflowr attempt to automatically create the repository "myproject" on GitHub. This
requires logging into GitHub and enabling the workflowr-oauth-app access to the account
"lakeseafly".

2. Create the repository "myproject" yourself by going to https://github.com/new and entering
"myproject" for the Repository name. This is the default option.

Enter your choice (1 or 2): 1
You chose option 1: have workflowr attempt to create repo
Requesting authorization for workflowr app to access GitHub account lakeseafly
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort
Authentication complete.
Creating repository myproject
*  Created lakeseafly/myproject
To do: Run wflow_git_push() to push your project to GitHub

输入你的用户名后,有两个选项。第一个是询问你是否要授权workflow程序在GitHub上自动创建存储库。如果你同意,将会在浏览器中新建一个窗口,对你的用户名和密码进行身份验证,然后将权限授予“ workflowr-oauth-app”以访问你的帐户。如果你选择第二项,手动的,那你就需要手动到github上创建对应的存储库

> wflow_git_push() 
Please enter your username (Esc to cancel): lakeseafly
Summary from wflow_git_push

Pushing to the branch "master" of the remote repository "origin" 

Using the HTTPS protocol
The following Git command was run:

  $ git push origin master
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容