我对正确处理配置文件有疑问。我现在试图解决我的问题几天,但是以最好的意愿,我只是找不到解决方法。我知道这个问题可能与这里的所有其他问题都非常相似,我确实尝试使用它们-但我并没有真正理解它。我希望,当我解决此问题时,关于蛇形制作原理的一些事情会更加清楚。
我只是切换到snakemake,我以为我可以轻松转换bash脚本。为了熟悉snakemake,我开始尝试一个简单的数据处理管道。我知道我可以解决问题,同时在蛇文件中定义每个变量。但是我想使用一个外部配置文件。 首先是说,为了更好地理解,我决定只发布我认为可以使用的代码。我已经使用了“ rule all”和“ lambda”功能的不同版本,但是到目前为止没有任何效果,这只会造成混乱。对于为什么无法正常工作,我确实感到有些尴尬和困惑。变量与键不同,因为我已经拥有一个重新定义变量的版本,例如: $ sample = config [“ samples”]
我非常感谢示例代码。
我想拥有的是:
The config file:
samples:
- SRX1232390
- SRX2312380
names:
- SomeData
- SomeControl
adapters:
- GATCGTAGC
- GATCAGTCG
然后我想我可以像其他变量一样调用这些键。
rule download_fastq:
output:
"fastq/{name}.fastq.gz"
shell:
"fastq-dump {wildcards.sample} > {output}"
以后会有更多规则,所以我认为对于他们来说,我也只需要一个键:
rule trimming_cutadapt:
input:
"fastq/{name}.fastq"
output:
"ctadpt_{name}.fastq"
shell:
"cutadapt -a {adapt}"
我还尝试了一些配置文件,如下所示: 样本:
Somedata: SRX1232131
SomeControl: SRX12323
但是最后我也没有找到最终的解决方案,我也不知道该如何添加第三个“变量”。 我希望以某种方式可以理解我想要的东西。如果有人可以帮助我,那将是非常棒的。
编辑:
好的-我重新编写了代码,并尝试深入研究所有内容。在这种情况下,我担心我的理解力不足以将我阅读的内容联系起来。我非常感谢一些提示,这些提示可能会帮助我理解自己的困惑。 首先:我决定在配置步骤中执行此操作,而不是尝试从管道下载数据。我现在尝试了两个不同的版本:
基于this的答案,我尝试了第一版。我喜欢带有两个文件的版本。但是,我现在陷入了如何处理变量的问题中,例如将它们与lambda函数一起使用,或者通常会写“ config [“ sample”]”的所有内容。 因此,我的问题是我不了解如何继续进行操作,也不知道如何正确使用语法来调用变量。
#version one
configfile: "config.yaml"
sample_file = config["sample_file"]
import pandas as pd
sample = pd.read_table(sample_file)['samples']
adapt = pd.read_table(sample_file)['adapters']
rule trimming_cutadapt:
input:
data=expand("../data/{sample}.fastq", name = pd.read_table(sample_file)['names']),
lambda wildcards: ???
output:
"trimmed/ctadpt_{sample}.fastq"
shell:
"cutadapt -a {adapt}"
因此,我回过头来尝试了解使用和定义通配符。因此(除其他外),我研究了约翰尼斯的示例snakefile和示例rules。当然也要加入man中。哦,还有关于zip功能的内容。
至少我不会再收到一个错误,因为它无法处理通配符或其他任何内容。现在它什么都不做。而且我找不到原因,因为我没有任何信息。另外,我标记了一些我不理解的观点。
#version two
configfile: "config_ChIP_Seq_Pipeline.yaml"
rule all:
input:
expand("../data/{sample}.fastq", sample=config["samples"])
#when to write the lambda or the expand in a rule all and when into the actual rule?
rule trimming_cutadapt:
input:
"../data/{sample}.fastq"
params:
adapt=lambda wildcards: config[wildcards.sample]["adapt"] #why do I have to write .samle? when I have to use wildcard.XXX in the shell part?
output:
"trimmed/ctadpt_{sample}.fastq"
shell:
"cutadapt -a {params.adapt}"
作为测试文件,我使用了this one。 我的配置文件在版本1中:
sample_file: "sample.tab"
和标签文件:
samples names adapters
test_1 input GACCTA
和版本2中的配置文件:
samples:
- test_1
adapt:
- GTACGTAG
感谢您的帮助和患者!
欢呼