内容

描述R中的工具

提供的主界面sevenbridges包是工具功能,它基本上是一个R界面,类似于Seven Bridges的图形用户界面来描述工具,我也强烈推荐它,因为它非常简单。

对于R用户谁想在一切脚本这里是替代解决方案。我也做了一些工作,试图使它更容易使用,任何建议都是欢迎的。

所以我强烈建议用户阅读文档工具编辑器章节的癌症基因组云,了解它是如何工作的,甚至尝试它的平台与GUI。这将帮助我们更好、更容易地使用R界面。

或者你只是想快速创建工具,请继续阅读。

例子:给我一个随机的数字

让我们从最简单的例子开始

一些基本的论点工具函数。

更多可接受参数请查看帮助(CommandLineTool)而且帮助(工具)欲知详情。我们基本上符合CWL标准,你可以随时查看他们的手册。

要求及提示

简而言之,暗示不是要求来执行。我们现在接受以下需求项cpumem码头工人fileDef;你可以通过要求()构造函数。

这样做的缺点很明显,您对脚本和命令行界面的控制要少得多。

指定输入和输出

很可能你的命令行接口接受额外的参数,例如,

  • 文件
  • 字符串
  • 枚举
  • int
  • 浮动
  • 布尔

要在工具中指定它,你可以使用输入函数,然后将其传递给输入参数作为列表或单个项。你甚至可以将它们构造为data.frame,但是这样的话,你通常必须提供相等的参数,输入较少,但灵活性较差。

输入()需要的参数id而且类型输出()需要的参数id因为类型默认为file。

特殊类型:ItemArray和enum

类型可以是一个单一类型的数组,最常见的情况是,如果你的输入是一个文件列表,你可以这样做type = ItemArray("File")或者简单到type = "文件…"与单个文件输入进行区分。

我们还提供了枚举类型,当您指定枚举时,请像这样传递所需的名称和符号Type = enum("format", c("pdf", "html"))然后在界面中,当你执行任务时,你会弹出下拉框。

完整的例子,请查看“制作最好的生物导体工作流程”教程,如果您是高级用户,可以简单地查看本月/码头工人文件夹或检查github的例子在这里

使用现有的docker映像和命令

如果您已经在脑海中有一个提供所需功能的docker映像,那么您可以直接使用它。的baseCommand是要在该容器中执行的命令行。stdout指定要捕获标准输出的输出文件,并将其收集到平台上。

图书馆(sevenbridges)
## ##附件:“七座桥”
下面的对象从'package:BiocStyle'中屏蔽:## ## output
rbx < -工具id =“runif”标签=“runif”提示=需求码头工人拉=“摇滚/ r-base”),cpu1),mem2000)),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 <-fileDefname =“runif。R”内容=“set.seed (1)runif(100)“) ##或readLines .srcfile <-执行“码头工人/ sevenbridges / src / runif。R”包=“sevenbridges”) fd <-fileDefname =“runif。R”内容=粘贴readline(.srcfile),崩溃=\ n)) ##或通过reader读取图书馆(readr) fd <-fileDefname =“runif。R”内容=read_file(.srcfile)) RBX <-工具id =“runif”标签=“runif”提示=需求码头工人拉=“摇滚/ r-base”),cpu1),mem2000)),需求=需求(fd),baseCommand =“Rscript runif。R”stdout =“output.txt”输出=输出id =“随机”水珠=“* . txt”))

多重脚本怎么样?

##或简单的readLines .srcfile <-执行“码头工人/ sevenbridges / src / runif。R”包=“sevenbridges”) fd1 <-fileDefname =“runif。R”内容=粘贴readline(.srcfile),崩溃=\ n)) fd2 <-fileDefname =“runif2。R”内容=“set.seed (1)runif(100)“) RBX <-工具id =“runif_twoscript”标签=“runif_twoscript”提示=需求码头工人拉=“摇滚/ r-base”),cpu1),mem2000)),需求=需求(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”),cpu1),mem2000)),baseCommand =“runif。R”输入=在。Lst, ##或ins.df输出=out.lst)

这里我使用data.frame作为输入和输出的例子。

在。df < -data.frameid =c“数量”“最小值”“马克斯”“种子”),描述=c“观测次数”“分布下限”“分布的上限”"seed with set.seed"),类型=c“整数”“浮动”“浮动”“浮动”),标签=c“数量”“最小值”“马克斯”“种子”),前缀=c”——n””- - - min””——马克斯””——种子”),默认=c1010123),要求=c真正的))。df < -data.frameid =c“随机”“报告”),类型=c“文件”“文件”),水珠=c“* . txt”“* . html”)) RBX <-工具id =“runif”标签=“随机数发生器”提示=需求码头工人拉=“腾飞/ runif”),cpu1),mem2000)),baseCommand =“runif。R”输入=在。Df, ##或ins.df输出=out.df)

带有命令行的快速命令行接口(位置和命名参数)

对于高级用户,请阅读另一个教程“创建Docker容器和命令行接口(使用docopt)”,“docopt”是一种更正式的构造命令行接口的方法,但这里有一种快速的方法来创建命令行接口commandArgs

假设我已经有了这样一个使用位置映射参数的R脚本

  1. 数字
  2. 最小值
  3. 马克斯
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 <-fileDefname =“runif。R”内容=read_file(fl)) RBX <-工具id =“runif”标签=“runif”提示=需求码头工人拉=“摇滚/ r-base”),cpu1),mem2000)),需求=需求(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 <-fileDefname =“runif。R”内容=read_file(fl)) RBX <-工具id =“runif”标签=“runif”提示=需求码头工人拉=“摇滚/ r-base”),cpu1),mem2000)),需求=需求(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 <-fileDefname =“runif。R”内容=read_file(fl)) RBX <-工具id =“runif”标签=“runif”提示=需求码头工人拉=“摇滚/ hadleyverse”),cpu1),mem2000)),需求=需求(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_addname =“草稿简单”描述=“runif的描述”应用=援助,输入=列表最小值=1max =10##确认,显示所有任务状态为草稿(tsk <-)p $任务状态=“草案”美元)啧啧运行()美元啧啧下载“~ /下载/”

在Rabix - test本地执行工具

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.frameid =c“数量”“最小值”“马克斯”“种子”),描述=c“观测次数”“分布下限”“分布的上限”"seed with set.seed"),类型=c“整数”“浮动”“浮动”“浮动”),标签=c“数量”“最小值”“马克斯”“种子”),前缀=c”——n””- - - min””——马克斯””——种子”),默认=c1010123),要求=c真正的))。df < -data.frameid =c“随机”“报告”),类型=c“文件”“文件”),水珠=c“* . txt”“* . html”)) RBX <-工具id =“runif”标签=“随机数发生器”提示=需求码头工人拉=“腾飞/ runif”),cpu1),mem2000)),baseCommand =“runif。R”输入=在。Df, ##或ins.df输出=Out.df)参数<-列表数量=3.max =5set_test_env“腾飞/ testenv”“mount_dir”test_tool(params rbx)

用R语言描述工作流

七桥平台上的图形用户界面更加方便

简介

为了创建一个工作流,我们提供了一个简单的接口来将您的工具管道到一个单一的工作流中,它可以在以下情况下工作

请注意对于复杂的工作流构建,我强烈建议使用我们的图形界面来做,没有更好的方法了。

例子

这里我举一个简单的例子

  1. 工具1输出1000个随机数
  2. 工具2记录日志
  3. 工具3对所有东西进行平均值计算

以下是我们支持的方法

首先构建工具

图书馆##一个生成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 <-的工具fileDefname =“日志。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 <-fileDefname =”的意思。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_addname =“流”草案描述=“流测试”应用=##确认,显示所有任务状态为草稿(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漂亮的=真正的

**重要**

这种流程构建方法易于线性流程,您最好的选择永远是我们的图形用户界面和编辑器。