内容

介绍

进行中

在本教程中,我们将通过

有很多有趣的方法可以做到,在这里,我更专注于R开发人员。2021欧洲杯体育投注开户

现有的Docker存储库

在创建任何东西之前,请确保您不会重新发明轮子,并为容器使用最佳的基本图像,因为您的工具链可能会节省大量时间。

摇滚乐项目

R官方R Docker图像称为“摇杆”项目,并且正在进行github,请访问页面以查找更多详细信息和Dockerfile。

图片 描述
摇杆/r碱
摇杆/R-Devel 基础加上SVN的R-Devel
摇滚歌手/rstudio 基础加RSTUDIO服务器
摇滚歌手/Hadleyverse Rstudio + Hadley的包裹,乳胶
摇杆/ropensci Hadleyverse + Ropensci软件包
摇杆/R-Devel-san 基地,SVN的R-Devel和SAN

生物导体图像

生物导体有一个不错的关于官方Docker图像,请阅读以获取更多详细信息。

图片
生物导体/devel_base
生物导体/devel_core
生物导体/devel_flow
生物导体/DEVEL_MICROARRAY
生物导体/devel_proteomics
生物导体/devel_序列
生物导体/Release_base
生物导体/realease_core
生物导体/Release_Flow
生物导体/Release_microarray
生物导体/Release_proteomics
生物导体/Release_序列

快速理解图像是图像名称的简短说明:

  • 发布图像基于摇滚歌手/rstudio
  • 开发图像基于摇滚歌手/rstudio每天
  • 根据:包含R,Rstudio和Biocinstaller +系统依赖性。
  • :基础 +核心的选择。
  • 流动:core +所有标记为流程仪生物浏览。
  • 微阵列:core +所有标记为微阵列生物浏览。
  • 蛋白质组学:core +所有标记为蛋白质组学生物浏览。
  • 测序:core +所有标记为测序生物浏览。

Dockerhub

Dockerhub还提供公共/私人存储库,您可以搜索现有的工具而无需构建自己,很可能有一些受欢迎的工具已经在那里维护得很好。

七桥码头注册表

教程即将开始。

示例7桥梁注册表:

  • 七桥images.sbgenomics.com/< repository> [:]
  • 癌症基因组学云cgc-images.sbgenomics.com/< repository> [:]

教程:随机数生成器

我们的目标是制作一个CWL应用程序生成Unif随机数,是的,核心功能是runif(),它是R中的本地功能。

munif
##函数(n,min = 0,max = 1)##。
munif((10
## [1] 0.8176919 0.7184033 0.8866669 0.4197080 0.4088952 0.7401310 0.8675907 ## [8] 0.3240680 0.59995706 0.76555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555转

使用Docopt软件包

在R中,我们在一个名为的软件包中也有一个不错的实现docopt, 由开发埃德温·德·琼斯(Edwin de Jonge)。检查一下教程在github上。

因此,让我们快速使用虚拟示例为我们的R脚本创建命令行界面。让我们转到统一的分配功能munif进入命令行工具。

当您查看帮助页面时munif,这是您要标记的关键信息。

用法runif(n,min = 0,max = 1)参数n观察数。如果长度(n)> 1,则长度为所需的数字。最小,最大分布的下限和上限。必须是有限的。

我将再添加一个参数以设置种子,以下是R脚本文件称为runif.r

在Commadn行脚本的开头,我使用Docopt标准来编写工具帮助。

'用法:runif.r [-n =   -  min =  -max =  -seed = ]选项:-n = 观测数。如果长度(n)> 1,则长度为所需的数字[默认值:1]。-Min = 分布的下限。必须是有限的[默认值:0]。-max = 分布的上限。必须是有限的[默认值:1]。-seed =  set.seed()函数的种子[默认值:1]'- >Doc图书馆(docopt)

让我们首先在R会话中进行一些测试,然后将其作为完整的功能命令行工具。

docopt(DOC)#没有提供的Argumetns
## 8 ## $  -  -n的列表:chr“ 1” ## $  -  min:chr“ 0” ## $  -  max:chr“ 1” ## $  -  seed:chr“ 1”##$ n:chr“ 1” ## $ min:chr“ 0” ## $ max:chr'1“ ## $ seed:chr” 1“ ## null
docopt(DOC,“ -n 10  -  min = 3  - 最大= 5”
## 8 ## $  -  -n列表:chr“ 10” ## $  -  min:chr“ 3” ## $  -  max:chr“ 5” ## $  -  seed:chr“ 1”##$ n:chr“ 10” ## $ min:chr“ 3” ## $ max:chr“ 5” ## $ seed:chr“ 1” ## null

看起来它有效,现在让我们为此命令行工具添加主函数脚本。

选择< -docopt(DOC)set.seed(选择$种子)munif((n =as.integer(选择$ n),最小=as.numeric(选择$ min),max =as.numeric(选择$ max))
## [1] 0.2655087

在文件顶部添加Shebang,这是一个完整的示例runif.r命令行将是这样

#!/usr/bin/rscript'用法:runif.r [-n =   -  min =  -max =  -seed = ]选项:-n = 观测数。如果长度(n)> 1,则长度为所需的数字[默认值:1]。-Min = 分布的下限。必须是有限的[默认值:0]。-max = 分布的上限。必须是有限的[默认值:1]。-seed =  set.seed()函数的种子[默认值:1]'- >Doc图书馆(docopt)选择< -docopt(DOC)set.seed(选择$种子)munif((n =as.integer(选择$ n),最小=as.numeric(选择$ min),max =as.numeric(选择$ max))

让我们测试此命令行。

$ runif.r  -   - 螺旋加载所需的包:方法用法:runif.r [-n =   -  min =  -max = -max =  -seed = ] options: --n = 观测数。如果长度(n)> 1,则长度为所需的数字[默认值:1]。-Min = 分布的下限。必须是有限的[默认值:0]。-max = 分布的上限。必须是有限的[默认值:1]。-seed =  set.seed()函数的种子[默认值:1] $ runif.r加载所需包:方法[1] 0.2655087 $ runif.r加载所需的包装:方法[1] 0.2655087 $ runif.r-seed = 123 -n 10  -  min = 1 -max = 100加载所需的包装:方法[1] 29.470174 79.042208 41.488715 88.418723 94.106261 5.510093 53.282443 [8] 89.34948555.55920664.646.46.46.46.46.46.34.5559.559.559.59.59.59.59.59.59.59.59.59.59.59.59.59.666.46.h46. in

有关完整的示例,您可以检查我的github例子

使用Commandargs的快速命令行接口(位置和命名ARGS)

对于高级用户,请阅读另一个教程“创建docker容器和命令行界面(带有docopt)”,“ docopt”是构造命令行接口的更正式的方法,但是有一种快速的方法可以使用此处使用命令行界面。只是命令

假设我已经使用映射参数的位置有这样的r脚本

  1. 数字
  2. 最小
  3. 最大限度
fl < -system.file((“ Docker/Sevenbridges/SRC”,,,,“ runif2spin.r”,,,,软件包=“七桥”((读取线(fl),,sep ='\ n'
#'---#'标题:“统一randome数字生成器示例”#'输出:#'html_document:#'toc:true#'number_sections:true#'亮点:haddock#'----#'##摘要摘要报告#'#'这是一个randome编号生成器#+ args < -  commandargs(true)r <-runif(n = as.integer(args [1]),min = as.numeric(args [2]),max =as.numeric(args [3]))头(r)摘要(r)hist(r)

忽略评论部分,稍后我将介绍旋转/stich。我的基本命令会像

rscript runif2spin.r 10 30 50

我只是以这种方式描述我的工具

图书馆(七桥)图书馆(readr)fd < -FILEDEF((名称=“ runif.r”,,,,内容=read_file(fl))rbx < -工具((id =“ munif”,,,,标签=“ munif”,,,,提示=要求((Docker((拉=“摇杆/R基本”),中央处理器((1),mem((2000),要求=要求(fd),basecommand =“ rscript runif.r”,,,,stdout =“ output.txt”,,,,输入=列表((输入((id =“数字”,,,,type =“整数”,,,,位置=1),输入((id =“ min”,,,,type =“漂浮”,,,,位置=2),输入((id =“最大限度”,,,,type =“漂浮”,,,,位置=3),输出=输出((id =“随机的”,,,,Glob =“ output.txt”))

现在,将JSON复制到您的项目应用程序中,并将其运行在云中进行测试

命名论证怎么样?我仍然建议使用“ docopt”软件包,但以简单的方式。

fl < -system.file((“ Docker/Sevenbridges/SRC”,,,,“ runif_args.r”,,,,软件包=“七桥”((读取线(fl),,sep ='\ n'
读取(FL)中的警告:在'/tmp/rtmptcggrl/rinst3bc539754275/七桥/docker/docker/docker/sewbridges/src/runif_args.r'
#'---#'标题:“统一randome数字生成器示例”#'输出:#'html_document:#'toc:true#'number_sections:true#'亮点:haddock#'----#'##摘要摘要报告#'#'这是一个randome编号生成器#+ args <-commandargs(true)##快速hack to split split命名参数splitargs <-function(x){res <-do.call(rbind,lapply,x,function(x,function(x,function)(i){res <-strsplit(i,“ =”)[[1]] nm <-gsub(“  - +”,“”,res [1])c(nm,res [2])})。r < -  res [,2] names(.r)< -  res [,1] .r} args <-splitargs(args)#+ r <-runif(n = as.integer(args [args [“ n n”)),,,,最小=as.numeric((args["min"]), max = as.numeric(args["max"])) summary(r) hist(r) write.csv(r, file = "out.csv")
rscript runif_args.r  -  -n = 10 -min = 30 -max = 50

我只是以这种方式描述我的工具,请注意,我使用独立= false并添加=在我的前缀中作为黑客。

图书馆(readr)fd < -FILEDEF((名称=“ runif.r”,,,,内容=read_file(fl))rbx < -工具((id =“ munif”,,,,标签=“ munif”,,,,提示=要求((Docker((拉=“摇杆/R基本”),中央处理器((1),mem((2000),要求=要求(fd),basecommand =“ rscript runif.r”,,,,stdout =“ output.txt”,,,,输入=列表((输入((id =“数字”,,,,type =“整数”,,,,独立=错误的,,,,前缀=“ -n =”),输入((id =“ min”,,,,type =“漂浮”,,,,独立=错误的,,,,前缀=“  -  -Min =”),输入((id =“最大限度”,,,,type =“漂浮”,,,,独立=错误的,,,,前缀=“ -max =”),输出=输出((id =“随机的”,,,,Glob =“ output.txt”))

快速报告:旋转和stich

替代方案,您可以使用Knitr的旋转/stich来直接从具有特殊格式的Rscript生成报告。例如,让我们使用上面的示例

fl < -system.file((“ Docker/Sevenbridges/SRC”,,,,“ runif_args.r”,,,,软件包=“七桥”((读取线(fl),,sep ='\ n'
读取(FL)中的警告:在'/tmp/rtmptcggrl/rinst3bc539754275/七桥/docker/docker/docker/sewbridges/src/runif_args.r'
#'---#'标题:“统一randome数字生成器示例”#'输出:#'html_document:#'toc:true#'number_sections:true#'亮点:haddock#'----#'##摘要摘要报告#'#'这是一个randome编号生成器#+ args <-commandargs(true)##快速hack to split split命名参数splitargs <-function(x){res <-do.call(rbind,lapply,x,function(x,function(x,function)(i){res <-strsplit(i,“ =”)[[1]] nm <-gsub(“  - +”,“”,res [1])c(nm,res [2])})。r < -  res [,2] names(.r)< -  res [,1] .r} args <-splitargs(args)#+ r <-runif(n = as.integer(args [args [“ n n”)),,,,最小=as.numeric((args["min"]), max = as.numeric(args["max"])) summary(r) hist(r) write.csv(r, file = "out.csv")

你的命令就是这样

rscript -e“ rmarkdown ::渲染(knitr :: spin('runif_args.r',false))”  -  args -n = 100 -min = 30 -max = 50

因此,我用Docker Image描述了这样的工具摇滚歌手/Hadleyverse这款托里安人的Knitr和RmarkDown包。

图书馆(readr)fd < -FILEDEF((名称=“ runif.r”,,,,内容=read_file(fl))rbx < -工具((id =“ munif”,,,,标签=“ munif”,,,,提示=要求((Docker((拉=“摇滚歌手/Hadleyverse”),中央处理器((1),mem((2000),要求=要求(fd),basecommand =“ rscript -e\”rmarkDown ::渲染(knitr :: spin('runif.r',false))\”-  args”,,,,stdout =“ output.txt”,,,,输入=列表((输入((id =“数字”,,,,type =“整数”,,,,独立=错误的,,,,前缀=“ -n =”),输入((id =“ min”,,,,type =“漂浮”,,,,独立=错误的,,,,前缀=“  -  -Min =”),输入((id =“最大限度”,,,,type =“漂浮”,,,,独立=错误的,,,,前缀=“ -max =”),输出=列表((输出((id =“ stdout”,,,,type =“文件”,,,,Glob =“ output.txt”),输出((id =“随机的”,,,,type =“文件”,,,,Glob =“*.csv”),输出((id =“报告”,,,,type =“文件”,,,,Glob =“*.html”)))

您最终会得到报告

带有R Markdown(高级)的可执行报告

我们不能真正通过简单地放置一个可执行的rmarkDown文件

#!/bin/bash/rscript

在您的降价中

当然,我们可以找到一种方法liftr或者尼特。但是rmarkDown允许您将参数传递到rmardown模板,请阅读本教程参数化报告。这并不能解决我想直接描述命令行接口中的问题。但是,这是替代方法:

创建一个命令行接口以传递参数从docopt到rmarkDown :: Render()功能。这样,我们可以将尽可能多的参数从命令行接口传递到我们的rmarkDown模板中。

因此,我们走了,这里是更新的方法,这也是我用于另一个有关RNA-Seq工作流程的教程。

fl < -system.file((“ Docker/Sevenbridges/SRC/”,,,,“ runif.r”,,,,软件包=“七桥”

这是命令行接口的当前内容

#!/usr/local/bin/rscript'用法:runif.r [ -  n =   -  min =  -max = -max =  -seed = ]选项: -n = 观测数。如果长度(n)> 1,则长度为所需的数字[默认值:1]。-Min = 分布的下限。必须是有限的[默认值:0]。-max = 分布的上限。必须是有限的[默认值:1]。-seed =  set.seed()函数的种子[默认:1]' - > doc库(docopt)opts <-docopt(doc)##创建param List lst lst lst < -  list(n = as.integer)(选择$ n),最小=as.numeric((opts$min), max = as.numeric(opts$max), seed = as.numeric(opts$seed)) ## execute your Rmarkdown with these parameters rmarkdown::render("/report/report.Rmd", BiocStyle::html_document(toc = TRUE), output_dir = ".", params = lst)

这是报告模板

--- title: "Uniform randome number generator example" output: BiocStyle::html_document: toc: true number_sections: true highlight: haddock css: style.css includes: in_header: logo.md params: seed: 1 n: 1 min:0 max:1 ---````{r style,echo = false,结果='asis'} biocstyle :: markdown(css.files =“ custom.css”)} set.seed(params $ seed)r <-runif(n = as.integer(params $ n),min = as.numeric(params $ min),max = as.numeric(params $ max))摘要(r)历史(r)``````````''

设置Dockerhub自动构建

为了使事情更容易再现,显式和自动,您可以自动脚架自动在Docker Hub上构建容器/图像。这是我所做的

  1. 我在我的github上创建了一些名为“ docker”的项目,例如,所有的容器都从dockerfile板条板上,例如tengfei/docker/munif,请去这里检查一下
  2. 该文件夹根有一个Dockerfile和子文件夹,用于我在构建时间添加的额外材料,例如脚本或报告模板。
  3. 登录您的Dockerhub帐户,之后教程从您的GitHub帐户中制作“自动构建”。确保通过自定义Dockerfile的正确位置。
  4. 然后,每次推动GitHub的新更新时,您都会拥有自动构建。
  5. 开始使用您的Docker图像,例如“ Tengfei/Munif”
  6. 也可以将其推入您的Sevenbridges平台注册表。

更多示例

在“ Inst/Docker”文件夹下,还有更多示例,您可以查看如何描述命令行并构建Docker,如何制作报告模板。您可以阅读在线github代码。或者,您可以阅读另一个有关我们如何用生物导体包裹RNA-Seq工作流程的教程。