提供的主界面sevenbridges
包是工具
功能,它基本上是一个R界面,类似于Seven Bridges的图形用户界面来描述工具,我也强烈推荐它,因为它非常简单。
对于R用户谁想在一切脚本这里是替代解决方案。我也做了一些工作,试图使它更容易使用,任何建议都是欢迎的。
所以我强烈建议用户阅读文档工具编辑器章节的癌症基因组云,了解它是如何工作的,甚至尝试它的平台与GUI。这将帮助我们更好、更容易地使用R界面。
或者你只是想快速创建工具,请继续阅读。
让我们从最简单的例子开始
Rscript
一些基本的论点工具
函数。
更多可接受参数请查看帮助(CommandLineTool)
而且帮助(工具)
欲知详情。我们基本上符合CWL标准,你可以随时查看他们的手册。
简而言之,暗示不是要求来执行。我们现在接受以下需求项cpu
,mem
,码头工人
,fileDef
;你可以通过要求()
构造函数。
这样做的缺点很明显,您对脚本和命令行界面的控制要少得多。
很可能你的命令行接口接受额外的参数,例如,
要在工具中指定它,你可以使用输入
函数,然后将其传递给输入
参数作为列表或单个项。你甚至可以将它们构造为data.frame,但是这样的话,你通常必须提供相等的参数,输入较少,但灵活性较差。
输入()
需要的参数id
而且类型
.输出()
需要的参数id
因为类型
默认为file。
类型可以是一个单一类型的数组,最常见的情况是,如果你的输入是一个文件列表,你可以这样做type = ItemArray("File")
或者简单到type = "文件…"
与单个文件输入进行区分。
我们还提供了枚举类型,当您指定枚举时,请像这样传递所需的名称和符号Type = enum("format", c("pdf", "html"))
然后在界面中,当你执行任务时,你会弹出下拉框。
完整的例子,请查看“制作最好的生物导体工作流程”教程,如果您是高级用户,可以简单地查看本月/码头工人
文件夹或检查github的例子在这里
如果您已经在脑海中有一个提供所需功能的docker映像,那么您可以直接使用它。的baseCommand
是要在该容器中执行的命令行。stdout
指定要捕获标准输出的输出文件,并将其收集到平台上。
图书馆(sevenbridges)
## ##附件:“七座桥”
下面的对象从'package:BiocStyle'中屏蔽:## ## output
rbx < -工具(id =“runif”,标签=“runif”,提示=需求(码头工人(拉=“摇滚/ r-base”),cpu(1),mem(2000)),baseCommand ="Rscript -e 'runif(100)'",stdout =“output.txt”,输出=输出(id =“随机”,水珠=“* . txt”) rbx
# # # #个:id: runif id:“# runif”# #输入:[]# #输出:# # -类型:# #——“零”# #文件# #标签:“# #描述:”# # streamable:没有# #默认:“# # id: #随机的# # outputBinding: # #一团:“* . txt”# #要求:[]# #提示:# # -类:DockerRequirement # # dockerPull:摇臂/ r-base # # dockerLoad:“# # dockerFile:“# # dockerImageId:“# # dockerOutputDirectory : '' ## - 类:小企业:CPURequirement # #值:1 # # -类:小企业:MemRequirement # #值:2000 # #标签:runif # #类:CommandLineTool ## baseCommand: ## - Rscript -e 'runif(100)' ## arguments: [] ## stdout: output.txt
rbx美元toJSON()
# #{“小企业:id”:“runif”,“id”:“# runif”、“输入”:[],“输出”:[{“类型”:“空”,“文件”,“标签”:“”,“描述”:“”,“streamable”:假的,“默认”:“”,“id”:“#随机”、“outputBinding”:{“水珠”:“* . txt”}}],“需求”:[],“提示”:[{“类”:“DockerRequirement”,“dockerPull”:“摇滚/ r-base”、“dockerLoad”:“”,“dockerFile”:“”,“dockerImageId”:“”,“dockerOutputDirectory”:"},{"类":“小企业:CPURequirement”、“价值”:1},{“类”:“小企业:MemRequirement”,“价值”:2000}],“标签”:“runif”、“类”:“CommandLineTool”、“baseCommand”:[" Rscript - e ' runif(100)”,“参数”:[],“标准输出”:“output.txt”}
默认情况下,工具对象显示YAML,但您可以简单地将其转换为JSON,并通过导入JSON将其复制到您的七桥平台图形编辑器。
rbx美元toJSON()
# #{“小企业:id”:“runif”,“id”:“# runif”、“输入”:[],“输出”:[{“类型”:“空”,“文件”,“标签”:“”,“描述”:“”,“streamable”:假的,“默认”:“”,“id”:“#随机”、“outputBinding”:{“水珠”:“* . txt”}}],“需求”:[],“提示”:[{“类”:“DockerRequirement”,“dockerPull”:“摇滚/ r-base”、“dockerLoad”:“”,“dockerFile”:“”,“dockerImageId”:“”,“dockerOutputDirectory”:"},{"类":“小企业:CPURequirement”、“价值”:1},{“类”:“小企业:MemRequirement”,“价值”:2000}],“标签”:“runif”、“类”:“CommandLineTool”、“baseCommand”:[" Rscript - e ' runif(100)”,“参数”:[],“标准输出”:“output.txt”}
rbx美元toJSON(漂亮的=真正的)
# #{# #“小企业:id”:“runif”,# #“id”:“# runif”,输入# #” ": [], ## " 输出 ": [ ## { ## " 类型”:“空”,“文件”,# #”标签 ": "", ## " 描述 ": "", ## " streamable”:假的,# #“违约 ": "", ## " 随机“id”:“# # #”outputBinding”:{# #“水珠”:“* . txt " ## } ## } ## ], ## " 需求 ": [], ## " 提示 ": [ ## { ## " 类”:“DockerRequirement " # # " dockerPull”:“摇滚/ r-base dockerLoad”,# #” ": "", ## " dockerFile ": "", ## " dockerImageId ": "", ## " dockerOutputDirectory ": "" ## }, ## { ## " 类”:“小企业:CPURequirement”,# #“价值”:1 ## }, ## { ## " 阶级”:“小企业:MemRequirement”,# #“价值”:2000 ## } ## ], ## " 标签”:“runif”,# #“类”:“CommandLineTool baseCommand“,# #:# #”Rscript - e ' runif (100 )'" ## ], ## " 参数 ": [], ## " stdout”:“output.txt“# #}
rbx美元toYAML()
## [1] "sbg:id: runif\nid: '#runif'\ninputs: []\noutputs:\n- type:\n - 'null'\n - File\n label: " \n description: " \n streamable: no\n default: " \nid: '#random'\n outputBinding:\n glob: '*.txt'\nrequirements: []\nhints:\n- class: DockerRequirement\n dockerPull: rocker/r-base\n dockerLoad: " \n dockerFile: " \n dockerImageId: " \n dockerOutputDirectory: " \n- class: sbg:CPURequirement\n value: 1\n- class: sbg:MemRequirement\n value: 2000\nlabel: runif\nclass:CommandLineTool\nbaseCommand:\n- Rscript -e 'runif(100)'\narguments: []\nstdout: output.txt\n"
如果您想创建基于现有映像的简单脚本,请使用fileDef
.
##新建文件fd <-fileDef(name =“runif。R”,内容=“set.seed (1)runif(100)“) ##或readLines .srcfile <-执行(“码头工人/ sevenbridges / src / runif。R”,包=“sevenbridges”) fd <-fileDef(name =“runif。R”,内容=粘贴(readline(.srcfile),崩溃="\ n")) ##或通过reader读取图书馆(readr) fd <-fileDef(name =“runif。R”,内容=read_file(.srcfile)) RBX <-工具(id =“runif”,标签=“runif”,提示=需求(码头工人(拉=“摇滚/ r-base”),cpu(1),mem(2000)),需求=需求(fd),baseCommand =“Rscript runif。R”,stdout =“output.txt”,输出=输出(id =“随机”,水珠=“* . txt”))
多重脚本怎么样?
##或简单的readLines .srcfile <-执行(“码头工人/ sevenbridges / src / runif。R”,包=“sevenbridges”) fd1 <-fileDef(name =“runif。R”,内容=粘贴(readline(.srcfile),崩溃="\ n")) fd2 <-fileDef(name =“runif2。R”,内容=“set.seed (1)runif(100)“) RBX <-工具(id =“runif_twoscript”,标签=“runif_twoscript”,提示=需求(码头工人(拉=“摇滚/ r-base”),cpu(1),mem(2000)),需求=需求(fd1 fd2),baseCommand =“Rscript runif。R”,stdout =“output.txt”,输出=输出(id =“随机”,水珠=“* . txt”))
##传入一个输入列表。lst < -列表(输入(id =“数量”,描述=“观测次数”,类型=“整数”,标签=“数量”,前缀=”——n”,默认=1,要求=真正的,cmdInclude =真正的),输入(id =“最小值”,描述=“分布下限”,类型=“浮动”,标签=“最小值”,前缀=”- - - min”,默认=0),输入(id =“马克斯”,描述=“分布的上限”,类型=“浮动”,标签=“马克斯”,前缀=”——马克斯”,默认=1),输入(id =“种子”,描述="seed with set.seed",类型=“浮动”,标签=“种子”,前缀=”——种子”,默认=1)) ##输出相同的方法。lst < -列表(输出(id =“随机”,类型=“文件”,标签=“输出”,描述=“随机数文件”,水珠=“* . txt”),输出(id =“报告”,类型=“文件”,标签=“报告”,水珠=“* . html”)) RBX <-工具(id =“runif”,标签=“随机数发生器”,提示=需求(码头工人(拉=“腾飞/ runif”),cpu(1),mem(2000)),baseCommand =“runif。R”,输入=在。Lst, ##或ins.df输出=out.lst)
这里我使用data.frame作为输入和输出的例子。
在。df < -data.frame(id =c(“数量”,“最小值”,“马克斯”,“种子”),描述=c(“观测次数”,“分布下限”,“分布的上限”,"seed with set.seed"),类型=c(“整数”,“浮动”,“浮动”,“浮动”),标签=c(“数量”,“最小值”,“马克斯”,“种子”),前缀=c(”——n”,”- - - min”,”——马克斯”,”——种子”),默认=c(1,0,10,123),要求=c(真正的,假,假,假))。df < -data.frame(id =c(“随机”,“报告”),类型=c(“文件”,“文件”),水珠=c(“* . txt”,“* . html”)) RBX <-工具(id =“runif”,标签=“随机数发生器”,提示=需求(码头工人(拉=“腾飞/ runif”),cpu(1),mem(2000)),baseCommand =“runif。R”,输入=在。Df, ##或ins.df输出=out.df)
对于高级用户,请阅读另一个教程“创建Docker容器和命令行接口(使用docopt)”,“docopt”是一种更正式的构造命令行接口的方法,但这里有一种快速的方法来创建命令行接口commandArgs
假设我已经有了这样一个使用位置映射参数的R脚本
fl < -执行(“码头工人/ sevenbridges / src ",“runif2spin。R”,包=“sevenbridges”)猫(readline(fl),9月='\ n')
#“——#”标题:“统一随机数生成器示例”#'输出:#' html_document: #' toc: true #'number_sections: true #'highlight: haddock #'——#'##摘要报告#'这是一个随机数生成器#+ args <- commandArgs(true) r <- runif(n = as.integer(args[1]), min = as.numeric(args[2]), max = as.numeric(args[3])) head(r) summary(r) hist(r)
忽略评论部分,稍后我会介绍spin/stich。我的基本命令是这样的
Rscript runif2spin。R 10 30 50
我只是这样描述我的工具
图书馆(readr) fd <-fileDef(name =“runif。R”,内容=read_file(fl)) RBX <-工具(id =“runif”,标签=“runif”,提示=需求(码头工人(拉=“摇滚/ r-base”),cpu(1),mem(2000)),需求=需求(fd),baseCommand =“Rscript runif。R”,stdout =“output.txt”,输入=列表(输入(id =“数量”,类型=“整数”,位置=1),输入(id =“最小值”,类型=“浮动”,位置=2),输入(id =“马克斯”,类型=“浮动”,位置=3.)),输出=输出(id =“随机”,水珠=“output.txt”))
现在复制粘贴json到您的项目应用程序中,并在云中运行它来测试它
命名参数呢?我仍然会推荐使用“docopt”包,但为了简单的方法。
fl < -执行(“码头工人/ sevenbridges / src ",“runif_args。R”,包=“sevenbridges”)猫(readline(fl),9月='\ n')
在readLines(fl)中警告:在'/tmp/RtmptCGgRL/ Rinst3bc539754275/sevenbridges/docker/sevenbridges/src/runif_args中发现不完整的最终行。R '
#“——#”标题:“统一随机数生成器示例”#“output: #”html_document: #“toc: true”#“number_sections: true”#“highlight: haddock #”——#“##摘要报告#”这是一个随机数生成器#+ args <- commandArgs(true) ##快速破解分裂命名参数splitArgs <-函数(x){res <- do。call(rbind, lapply(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["n"]), min = 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(name =“runif。R”,内容=read_file(fl)) RBX <-工具(id =“runif”,标签=“runif”,提示=需求(码头工人(拉=“摇滚/ r-base”),cpu(1),mem(2000)),需求=需求(fd),baseCommand =“Rscript runif。R”,stdout =“output.txt”,输入=列表(输入(id =“数量”,类型=“整数”,单独的=假,前缀=”——n = "),输入(id =“最小值”,类型=“浮动”,单独的=假,前缀=”- - - min = "),输入(id =“马克斯”,类型=“浮动”,单独的=假,前缀=”——max = ")),输出=输出(id =“随机”,水珠=“output.txt”))
另一种选择是,你可以从knitr中使用spin/stich直接从具有特殊格式的Rscript生成报告。例如,让我们用上面的例子
fl < -执行(“码头工人/ sevenbridges / src ",“runif_args。R”,包=“sevenbridges”)猫(readline(fl),9月='\ n')
在readLines(fl)中警告:在'/tmp/RtmptCGgRL/ Rinst3bc539754275/sevenbridges/docker/sevenbridges/src/runif_args中发现不完整的最终行。R '
#“——#”标题:“统一随机数生成器示例”#“output: #”html_document: #“toc: true”#“number_sections: true”#“highlight: haddock #”——#“##摘要报告#”这是一个随机数生成器#+ args <- commandArgs(true) ##快速破解分裂命名参数splitArgs <-函数(x){res <- do。call(rbind, lapply(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["n"]), min = as.numeric(args["min"]), max = as.numeric(args["max"])) summary(r) hist(r) write.csv(r, file = "out.csv")
你的命令是这样的
Rscript -e "rmarkdown::render(knitr::spin('runif_args. s ') "R, FALSE))”——args——n=100——min=30——max=50
我用docker image这样描述我的工具摇臂/ hadleyverse
这包含针织和廉价包装。
图书馆(readr) fd <-fileDef(name =“runif。R”,内容=read_file(fl)) RBX <-工具(id =“runif”,标签=“runif”,提示=需求(码头工人(拉=“摇滚/ hadleyverse”),cpu(1),mem(2000)),需求=需求(fd),baseCommand =“Rscript - e\”rmarkdown::渲染(knitr:: (' runif旋转。R ', FALSE))\”——参数”,stdout =“output.txt”,输入=列表(输入(id =“数量”,类型=“整数”,单独的=假,前缀=”——n = "),输入(id =“最小值”,类型=“浮动”,单独的=假,前缀=”- - - min = "),输入(id =“马克斯”,类型=“浮动”,单独的=假,前缀=”——max = ")),输出=列表(输出(id =“标准输出”,类型=“文件”,水珠=“output.txt”),输出(id =“随机”,类型=“文件”,水珠=“* . csv”),输出(id =“报告”,类型=“文件”,水珠=“* . html”)))
最后你会得到一份报告
有时如果你想要你的输出文件继承特定的输入文件,只需使用inheritMetadataFrom
在output()中调用并传递输入文件id。如果您想添加额外的元数据,您可以通过元数据
output()函数调用中的列表。例如,我希望输出报告继承来自“bam_file”输入节点(本例中没有)的所有元数据,并带有两个额外的元数据字段。
出去了。lst < -列表(输出(id =“随机”,类型=“文件”,标签=“输出”,描述=“随机数文件”,水珠=“* . txt”),输出(id =“报告”,类型=“文件”,标签=“报告”,水珠=“* . html”,inheritMetadataFrom =“bam_file”,元数据=列表(作者=“腾飞”,示例=“随机”))) out.lst
##[[1]] ##类型:## -“null”## -文件##标签:输出##描述:随机数文件##可流:没有##默认:“## id:“#随机”##输出绑定:## glob:“*.txt”## ## ##[[2]]#类型:## -“null”## -文件##标签:报告##描述:“##可流:没有##默认:”## id:“#报告”##输出绑定:## glob:“*.html”## sbg:inheritMetadataFrom: #bam_file ## sbg:元数据:##作者:tenfei ##样本:随机
使用API功能,您可以直接将您的工具加载到帐户中。运行一个任务,如何操作,请查看API完整指南
以下部分,请暂时跳过。
< - - - - - -身份验证(平台=“公司治理文化”,用户名=“腾飞”) p <-美元项目(“演示”) app.runif <-p $app_add(“runif555”, rbx)援助<-app.runif $ p $ idtask_add(name =“草稿简单”,描述=“runif的描述”,应用=援助,输入=列表(最小值=1,max =10##确认,显示所有任务状态为草稿(tsk <-)p $任务(状态=“草案”美元)啧啧运行()美元啧啧下载(“~ /下载/”)
1.从CLI
在开发工具时,首先在本地测试它们是很有用的。为此,我们可以使用rabix -生物信息学的可重复分析,https://github.com/rabix.要使用Java中rabix的最新实现(称为兔子)你可以使用docker image腾飞/ testenv:
Docker拉腾飞/testenv
将rabix工具作为json转储到dir中,其中还包含输入数据。写(rbx toJSON美元,文件= " < data_dir > / <工具> . json”)
.使inputs.json文件在同一目录中声明输入参数(您可以使用来自输入的相对路径。Json到数据)。创建容器:
Docker run——privilege——name bunny -v :/bunny_data -dit腾飞/testenv .使用实例
执行工具
Docker exec bunny bash -c 'cd /opt/bunny && ./rabix.sh -e /bunny_data/ bunny_data/. sh 'json / bunny_data inputs.json”
您将看到容器内的运行日志,并在容器内输出dir
注意:腾飞/testenv有R, python, Java…所以很多工具可以在没有docker要求设置的情况下工作。如果你设置docker要求,你需要先在容器内拉镜像来运行docker容器内运行bunny docker。
注意:输入。Json也可以是输入。yaml,如果你发现在yaml中声明输入更容易。
2.从R
图书馆(sevenbridges)。df < -data.frame(id =c(“数量”,“最小值”,“马克斯”,“种子”),描述=c(“观测次数”,“分布下限”,“分布的上限”,"seed with set.seed"),类型=c(“整数”,“浮动”,“浮动”,“浮动”),标签=c(“数量”,“最小值”,“马克斯”,“种子”),前缀=c(”——n”,”- - - min”,”——马克斯”,”——种子”),默认=c(1,0,10,123),要求=c(真正的,假,假,假))。df < -data.frame(id =c(“随机”,“报告”),类型=c(“文件”,“文件”),水珠=c(“* . txt”,“* . html”)) RBX <-工具(id =“runif”,标签=“随机数发生器”,提示=需求(码头工人(拉=“腾飞/ runif”),cpu(1),mem(2000)),baseCommand =“runif。R”,输入=在。Df, ##或ins.df输出=Out.df)参数<-列表(数量=3.,max =5)set_test_env(“腾飞/ testenv”,“mount_dir”)test_tool(params rbx)
七桥平台上的图形用户界面更加方便
为了创建一个工作流,我们提供了一个简单的接口来将您的工具管道到一个单一的工作流中,它可以在以下情况下工作
请注意对于复杂的工作流构建,我强烈建议使用我们的图形界面来做,没有更好的方法了。
这里我举一个简单的例子
以下是我们支持的方法
流
构造函数来构造流,然后使用传递步骤+
用符号来连接对象。+
只输出StepList
并支持运营% > > %
将输出流
不StepList
,如果你连接工具% > > %
我们将为您创建id。它总是输出工作流
图书馆##一个生成100随机数t1 <-的工具工具(id =“runif new test 3”,标签=“随机数”,提示=需求(码头工人(拉=“摇滚/ r-base”)),baseCommand ="Rscript -e 'x = runif(100);write.csv(x, file = 'random.txt', row.names = FALSE)'",输出=输出(id =“随机”,类型=“文件”,水珠=“random.txt”一个取日志fd <-的工具fileDef(name =“日志。R”,内容="args = commandArgs(TRUE)X = read。table(args[1], header = TRUE)[,'x']X = log(X)write.csv(x, file = 'random_log.txt', row.names = FALSE)") t2 <-工具(id ="log new test 3",标签=“日志”,提示=需求(码头工人(拉=“摇滚/ r-base”)),需求=需求(fd),baseCommand =“Rscript日志。R”,输入=输入(id =“数量”,类型=“文件”),输出=输出(id =“日志”,类型=“文件”,水珠=“* . txt”一个工具,做一个平均fd <-fileDef(name =”的意思。R”,内容="args = commandArgs(TRUE)X = read。table(args[1], header = TRUE)[,'x']X = mean(X)write.csv(x, file = 'random_mean.txt', row.names = FALSE)") t3 <-工具(id =“mean new test 3”,标签=“的意思是”,提示=需求(码头工人(拉=“摇滚/ r-base”)),需求=需求(fd),baseCommand =“Rscript的意思。R”,输入=输入(id =“数量”,类型=“文件”),输出=输出(id =“的意思是”,类型=“文件”,水珠=“* . txt”))步长<-t1 +t2 +t3 steplist
# # ([1])
# # id:“# random_number”# #输入:[]# #输出:# # - id: # random_number。随机的# #提示:[]运行:# # # #个:id: runif新的测试3 # # id:“# runif_new_test_3“# #输入:[]# #输出:# # -类型:# #——“零”# # # # -文件标签:“# #描述:”# # streamable:没有# #默认:“# # id: #随机的# # outputBinding: # #水珠:random.txt # #要求:[]# #提示:# # -类:DockerRequirement # # dockerPull:摇臂/ r-base # # dockerLoad:“# # dockerFile:“# # dockerImageId:“# # dockerOutputDirectory:“# #标签:随机数# #类:CommandLineTool ## baseCommand: ## - Rscript -e 'x = runif(100);write.csv(x, file = 'random.txt', row.names = FALSE)' ##参数:[]
# # [[2]]
##输入:## - id: #get_log。#random_number。随机的# #输出:# # - id: # get_log.log“# #提示:[]# #运行:# #个:id:日志新的测试3 # # id:“# log_new_test_3”输入# #:# # -类型:# #——“零”# # # # -文件标签:“# #描述:”# # streamable:没有# #默认:“# # id:“# # #号要求:没有# #输出:# # -类型:# #——“零”# #文件# #标签:“# #描述:“# # streamable:没有# #默认:“# # id:“#日志”# # outputBinding: # #一团:“* . txt”# #要求:# # -类:CreateFileRequirement # # fileDef: # # -文件名:日志。r# # fileContent: "args = commandArgs(TRUE)\n x = read. "table(args[1], ## header = TRUE)[,'x']\n x = log(x)\n write.csv(x, ## file = 'random_log.txt', row.names = FALSE)\n " ##提示:## - class: DockerRequirement ## dockerPull: rocker/r-base ## dockerLoad: " ## dockerFile: " ## dockerImageId: " ## dockerOutputDirectory: " ## label:获取日志## class: CommandLineTool ## baseCommand: ## - Rscript日志。R ##参数:[]
# # [[3]]
# # id:“# get_mean”输入# #:# # - id: # get_mean。数量的# #来源:# get_log.log“# #输出:# # - id: # get_mean。意味着“# #提示:[]# #运行:# #个:id:意味着新的测试3 # # id:“# mean_new_test_3”输入# #:# # -类型:# #——“零”# # # # -文件标签:“# #描述:”# # streamable:没有# #默认:“# # id:“# # #号要求:没有# #输出:# # -类型:# #——“零”# #文件# #标签:“# #描述:“# # streamable:没有# #默认:“# # id:“#意味着“# # outputBinding: # #一团:“* . txt”# #要求:# # -类:CreateFileRequirement # # fileDef: # # -文件名:的意思。r# # fileContent: "args = commandArgs(TRUE)\n x = read. "table(args[1], ## header = TRUE)[,'x']\n x = mean(x)\n write.csv(x, ## file = 'random_mean.txt', row.names = FALSE)\n " ##提示:## - class: DockerRequirement ## dockerPull: rocker/r-base ## dockerLoad: " ## dockerFile: " ## dockerImageId: " ## dockerOutputDirectory: " ## label: get mean ## class: CommandLineTool ## baseCommand: ## - Rscript mean.txt "R ##参数:[]
要创建一个流,我们建议您使用流
函数,以便您可以将id和label传递给它。
f < -流(id =“Random-log-mean-new-test-2”,标签=随机对数均值新检验,步骤=steplist) f $toJSON()
# # {" id ":“# Random-log-mean-new-test-2”、“输入”:[],“输出”:[],“需求”:[],“提示”:[],“标签”:“随机对数平均新的测试”、“类”:“工作流”,“步骤”:[{" id ": " # random_number "、"输入":[],“输出”:{" id ": " # random_number。随机”}],“提示”:[],“运行”:{“小企业:id”:“runif新的测试3”、“id”:“# runif_new_test_3”、“输入”:[],“输出”:[{“类型”:“空”,“文件”,“标签”:“”,“描述”:“”,“streamable”:假的,“默认”:“”,“id”:“#随机”、“outputBinding”:{“水珠”:“random.txt}}],“需求”:[],“提示”:[{“类”:“DockerRequirement”,“dockerPull”:“摇滚/ r-base”、“dockerLoad”:“”,“dockerFile”:“”,“dockerImageId”:“”,“dockerOutputDirectory”:"}),“标签”:“随机数”、“类”:“CommandLineTool”、“baseCommand”:[" Rscript - e x =runif (100);write.csv(x, file = 'random.txt', row.names = FALSE)'"],"arguments":[]},"sbg:x":100,"sbg:y":200},{"id":"#get_log","inputs":[{"id":"#get_log.number","source":["#random_number.random"]}],"outputs":[{"id":"#get_log.log"}],"hints":[],"run":{"sbg:id":"log new test 3","id":"#log_new_test_3","inputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#number","required":false}],"outputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#log","outputBinding":{"glob":"*.txt"}}],"requirements":[{"class":"CreateFileRequirement","fileDef":[{"filename":"log.R","fileContent":"args = commandArgs(TRUE)\n x = read.table(args[1], header = TRUE)[,'x']\n x = log(x)\n write.csv(x, file = 'random_log.txt', row.names = FALSE)\n "}]}],"hints":[{"class":"DockerRequirement","dockerPull":"rocker/r-base","dockerLoad":"","dockerFile":"","dockerImageId":"","dockerOutputDirectory":""}],"label":"get log","class":"CommandLineTool","baseCommand":["Rscript log.R"],"arguments":[]},"sbg:x":350,"sbg:y":200},{"id":"#get_mean","inputs":[{"id":"#get_mean.number","source":["#get_log.log"]}],"outputs":[{"id":"#get_mean.mean"}],"hints":[],"run":{"sbg:id":"mean new test 3","id":"#mean_new_test_3","inputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#number","required":false}],"outputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#mean","outputBinding":{"glob":"*.txt"}}],"requirements":[{"class":"CreateFileRequirement","fileDef":[{"filename":"mean.R","fileContent":"args = commandArgs(TRUE)\n x = read.table(args[1], header = TRUE)[,'x']\n x = mean(x)\n write.csv(x, file = 'random_mean.txt', row.names = FALSE)\n "}]}],"hints":[{"class":"DockerRequirement","dockerPull":"rocker/r-base","dockerLoad":"","dockerFile":"","dockerImageId":"","dockerOutputDirectory":""}],"label":"get mean","class":"CommandLineTool","baseCommand":["Rscript mean.R"],"arguments":[]},"sbg:x":600,"sbg:y":200}],"sbg:canvas_zoom":1,"sbg:canvas_y":130,"sbg:canvas_x":40}
f $toJSON(漂亮的=真正的)
# #{# #“id”:“# Random-log-mean-new-test-2”,输入# #” ": [], ## " 输出 ": [], ## " 需求 ": [], ## " 提示 ": [], ## " 随机对数平均新标签”:“测试”,# #“类”:“工作流”,# #”步骤 ": [ ## { ## " id”:“# random_number " # # "输入 ": [], ## " 输出 ": [ ## { ## " “:”# random_number id。随机 " ## } ## ], ## " 提示 ": [], ## " 运行”:{# #“小企业:id”:“runif新的测试3”,# #“id”:“# runif_new_test_3”,输入# #” ": [], ## " 输出 ": [ ## { ## " 类型”:“空”,“文件”,# #”标签 ": "", ## " 描述 ": "", ## " streamable”:假的,# #“违约 ": "", ## " 随机“id”:“# # #”outputBinding”:{# #“水珠”:“random.txt " ## } ## } ## ], ## " 需求 ": [], ## " 提示 ": [ ## { ## " 类”:“DockerRequirement " # # " dockerPull”:“摇滚/ r-base dockerLoad”,# #” ": "", ## " dockerFile”:”“# #”dockerImageId ": "", ## " dockerOutputDirectory ": "" ## } ## ], ## " 标签”:“随机数”,# #“类”:“CommandLineTool " # # " baseCommand”:[# #“Rscript - e x = runif (100);write.csv (x,文件= random.txt, row.names = FALSE )'" ## ], ## " 参数 ": [] ## }, ## " 沙特:x”:100年,# #“小企业:y”:200 ## }, ## { ## " id”:“# get_log " # # "输入 ": [ ## { ## " “:”# get_log id。#random_number ", ## "source": ["#random_number. "随机 "] ## } ## ], ## " 输出 ": [ ## { ## " “:”# get_log.log id " ## } ## ], ## " 提示 ": [], ## " 运行”:{# #“小企业:id”:“日志新的测试3”,# #“id”:“# log_new_test_3”,输入# #” ": [ ## { ## " 类型”:“空”,“文件”,# #”标签 ": "", ## " 描述 ": "", ## " streamable”:假的,# #“违约 ": "", ## " id”:“#”,# #”需要“数量:假的 ## } ## ], ## " 输出 ": [ ## { ## " 类型”:“空”,“文件”,# #”标签 ": "", ## " 描述 ": "", ## " streamable”:假的,# #“违约 ": "", ## " id”:“#日志”,# #“outputBinding”:{# #“水珠”:“* . txt " ## } ## } ## ], ## " 需求 ": [ ## { ## " 类”:“CreateFileRequirement fileDef”,# #” ": [ ## { ## " 文件名”:“日志。R", ## "fileContent": "args = commandArgs(TRUE)\n x = read. "table(args[1], header = TRUE)[,'x']\ nX = log(X)\ nwrite.csv(x, file = 'random_log.txt', row.names = FALSE)\ n"# # } ## ] ## } ## ], ## "hints": [ ## { ## "class": "DockerRequirement", ## "dockerPull": "rocker/r-base", ## "dockerLoad": "", ## "dockerFile": "", ## "dockerImageId": "", ## "dockerOutputDirectory": "" ## } ## ], ## "label": "get log", ## "class": "CommandLineTool", ## "baseCommand": [ ## "Rscript log.R" ## ], ## "arguments": [] ## }, ## "sbg:x": 350, ## "sbg:y": 200 ## }, ## { ## "id": "#get_mean", ## "inputs": [ ## { ## "id": "#get_mean.number", ## "source": ["#get_log.log"] ## } ## ], ## "outputs": [ ## { ## "id": "#get_mean.mean" ## } ## ], ## "hints": [], ## "run": { ## "sbg:id": "mean new test 3", ## "id": "#mean_new_test_3", ## "inputs": [ ## { ## "type": ["null", "File"], ## "label": "", ## "description": "", ## "streamable": false, ## "default": "", ## "id": "#number", ## "required": false ## } ## ], ## "outputs": [ ## { ## "type": ["null", "File"], ## "label": "", ## "description": "", ## "streamable": false, ## "default": "", ## "id": "#mean", ## "outputBinding": { ## "glob": "*.txt" ## } ## } ## ], ## "requirements": [ ## { ## "class": "CreateFileRequirement", ## "fileDef": [ ## { ## "filename": "mean.R", ## "fileContent": "args = commandArgs(TRUE)\n x = read.table(args[1], header = TRUE)[,'x']\n x = mean(x)\n write.csv(x, file = 'random_mean.txt', row.names = FALSE)\n " ## } ## ] ## } ## ], ## "hints": [ ## { ## "class": "DockerRequirement", ## "dockerPull": "rocker/r-base", ## "dockerLoad": "", ## "dockerFile": "", ## "dockerImageId": "", ## "dockerOutputDirectory": "" ## } ## ], ## "label": "get mean", ## "class": "CommandLineTool", ## "baseCommand": [ ## "Rscript mean.R" ## ], ## "arguments": [] ## }, ## "sbg:x": 600, ## "sbg:y": 200 ## } ## ], ## "sbg:canvas_zoom": 1, ## "sbg:canvas_y": 130, ## "sbg:canvas_x": 40 ## }
或者使用%>>%
f < -t1 % > > %t2 % > > %t3 f $toJSON()
# # {" id ":“# random_number_get_log”、“输入”:[],“输出”:[],“需求”:[],“提示”:[],“标签”:“random_number get_log”、“类”:“工作流”,“步骤”:[{" id ":“# random_number”、“输入”:[],“输出”:{" id ": " # random_number。随机”}],“提示”:[],“运行”:{“小企业:id”:“runif新的测试3”、“id”:“# runif_new_test_3”、“输入”:[],“输出”:[{“类型”:“空”,“文件”,“标签”:“”,“描述”:“”,“streamable”:假的,“默认”:“”,“id”:“#随机”、“outputBinding”:{“水珠”:“random.txt}}],“需求”:[],“提示”:[{“类”:“DockerRequirement”,“dockerPull”:“摇滚/ r-base”、“dockerLoad”:“”,“dockerFile”:“”,“dockerImageId”:“”,“dockerOutputDirectory”:"}),“标签”:“随机数”、“类”:“CommandLineTool”、“baseCommand”:[" Rscript - e x =runif (100);write.csv(x, file = 'random.txt', row.names = FALSE)'"],"arguments":[]},"sbg:x":100,"sbg:y":200},{"id":"#get_log","inputs":[{"id":"#get_log.number","source":["#random_number.random"]}],"outputs":[{"id":"#get_log.log"}],"hints":[],"run":{"sbg:id":"log new test 3","id":"#log_new_test_3","inputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#number","required":false}],"outputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#log","outputBinding":{"glob":"*.txt"}}],"requirements":[{"class":"CreateFileRequirement","fileDef":[{"filename":"log.R","fileContent":"args = commandArgs(TRUE)\n x = read.table(args[1], header = TRUE)[,'x']\n x = log(x)\n write.csv(x, file = 'random_log.txt', row.names = FALSE)\n "}]}],"hints":[{"class":"DockerRequirement","dockerPull":"rocker/r-base","dockerLoad":"","dockerFile":"","dockerImageId":"","dockerOutputDirectory":""}],"label":"get log","class":"CommandLineTool","baseCommand":["Rscript log.R"],"arguments":[]},"sbg:x":350,"sbg:y":200},{"id":"#get_mean","inputs":[{"id":"#get_mean.number","source":["#get_log.log"]}],"outputs":[{"id":"#get_mean.mean"}],"hints":[],"run":{"sbg:id":"mean new test 3","id":"#mean_new_test_3","inputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#number","required":false}],"outputs":[{"type":["null","File"],"label":"","description":"","streamable":false,"default":"","id":"#mean","outputBinding":{"glob":"*.txt"}}],"requirements":[{"class":"CreateFileRequirement","fileDef":[{"filename":"mean.R","fileContent":"args = commandArgs(TRUE)\n x = read.table(args[1], header = TRUE)[,'x']\n x = mean(x)\n write.csv(x, file = 'random_mean.txt', row.names = FALSE)\n "}]}],"hints":[{"class":"DockerRequirement","dockerPull":"rocker/r-base","dockerLoad":"","dockerFile":"","dockerImageId":"","dockerOutputDirectory":""}],"label":"get mean","class":"CommandLineTool","baseCommand":["Rscript mean.R"],"arguments":[]},"sbg:x":600,"sbg:y":200}],"sbg:canvas_zoom":1,"sbg:canvas_y":130,"sbg:canvas_x":40}
如果这是您第一次上传这些工具,下面的脚本将把这些工具和工作流推送到您的项目中。
##需要id, full, sbg:id图书馆(七桥)a <-身份验证(平台=“公司治理文化”,用户名=“腾飞”) p <-美元项目(id =“腾飞/ helloworld”) app.runif <-p $app_add(“new_flow”, f)援助<-app.runif $ p $ idtask_add(name =“流”草案,描述=“流测试”,应用=##确认,显示所有任务状态为草稿(tsk <-)p $任务(“流草案”美元)啧啧运行()
你可以从你的回购中获取App,并在R中连接它来构建流程。
app1 < -p $应用程序(id =“腾飞/ helloworld / runif_new_test / 0”) app2 <-p $应用程序(id =“腾飞/快速入门/ log_new_test_3/0”) app3 <-p $应用程序(id =“腾飞/快速入门/ log_new_test_3/0”) f <-app1 % > > %app2 % > > %App3 f$id <-《随机数测试流程2》f $“小企业:id”<-“腾飞/ helloworld / testtesttest”f $toJSON(漂亮的=真正的)
**重要**
这种流程构建方法易于线性流程,您最好的选择永远是我们的图形用户界面和编辑器。