Pandas 表格结构蛇
我试图构建一个蛇形管道,其中处理过的文件及其参数在一个特定的环境中定义 在我的最小示例中,文件夹结构如下所示Pandas 表格结构蛇,pandas,snakemake,Pandas,Snakemake,我试图构建一个蛇形管道,其中处理过的文件及其参数在一个特定的环境中定义 在我的最小示例中,文件夹结构如下所示 ├── data │ ├── name1 │ ├── name2 │ ├── name3 │ └── name4 ├── output ├── samples.tsv └── Snakefile 我想将不同数量的文件“name1”、“name2”和“name3”(不是“name4”)复制到输出文件夹中。金额在sample.tsv中定义 fileName param
├── data
│ ├── name1
│ ├── name2
│ ├── name3
│ └── name4
├── output
├── samples.tsv
└── Snakefile
我想将不同数量的文件“name1”、“name2”和“name3”(不是“name4”)复制到输出文件夹中。金额在sample.tsv中定义
fileName parameter
name1 4
name2 6
name3 7
我想蛇形文件的基本结构应该有点像这样
import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)
rule copy:
input:
"data/{<file name X>}"
output:
"output/{<file name X>}_cut"
shell:
"head -n {parameter of X} {input} > {output} "
将熊猫作为pd导入
samples=pd.read_表(“samples.tsv”)。set_索引(“fileName”,drop=False)
规则副本:
输入:
“数据/{}”
输出:
“输出/{}\u切”
外壳:
“head-n{X}{input}>{output}的参数”
但我不知道如何将“示例”中的信息解析到规则中。将规则
all
添加为文件中的第一条规则:
规则所有:
输入:展开(“输出/{filenameX}\u剪切”,filenameX=samples)
此规则将收集所有必需的目标作为管道的目标,然后Snakemake将自动为每个文件分配一个
规则副本的实例。将规则all
添加为文件中的第一条规则:
规则所有:
输入:展开(“输出/{filenameX}\u剪切”,filenameX=samples)
此规则将收集所有必需的目标作为管道的目标,然后Snakemake将自动为每个文件分配一个规则副本的实例。要扩展Dimitry的答案,您可能需要在规则中添加一个lambda函数,将每个文件名链接到其参数在样本表中给出。例如:
import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)
rule all:
input:
expand('output/{fileName}_cut', fileName= samples.fileName),
rule copy:
input:
"data/{fileName}"
output:
"output/{fileName}_cut"
params:
n= lambda wc: samples[samples.fileName == wc.fileName].parameter.iloc[0],
shell:
"head -n {params.n} {input} > {output}"
要扩展Dimitry的答案,您可能需要在规则中添加一个lambda函数,该函数将每个文件名链接到示例工作表中给出的参数。例如:
import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)
rule all:
input:
expand('output/{fileName}_cut', fileName= samples.fileName),
rule copy:
input:
"data/{fileName}"
output:
"output/{fileName}_cut"
params:
n= lambda wc: samples[samples.fileName == wc.fileName].parameter.iloc[0],
shell:
"head -n {params.n} {input} > {output}"