【发布时间】:2019-05-14 15:23:52
【问题描述】:
我对正确处理配置文件有疑问。我现在正在尝试解决我的问题几天,但尽最大努力,我就是不知道该怎么做。我知道这个问题可能与这里的所有其他问题非常相似,我真的尝试使用它们 - 但我并没有真正明白。我希望当我解决这个问题时,关于snakemake如何工作的一些事情会更清楚。
我只是切换到snakemake,我认为我可以轻松地转换我的bash 脚本。为了熟悉snakemake,我开始尝试一个简单的数据处理管道。我知道我可以在定义蛇文件中的每个变量时解决我的问题。但我想使用外部配置文件。 首先是说,为了更好地理解,我决定只发布我认为会以某种方式工作的代码。我已经为“全部规则”和“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
以及第二版的配置文件:
samples:
- test_1
adapt:
- GTACGTAG
感谢您的帮助和患者!
干杯
【问题讨论】:
-
你看过如何使用configfile吗?来自配置文件的数据被读入
config字典(不是您的代码中的wildcards),您可以从中检索您感兴趣的“变量”。 -
是的,我做到了。但问题是使用 fastq-dump 将没有文件,只有入藏号。所以它只是“fastq-dump SRX1235621”
-
params指令可能对您有用。 -
我建议清理您的问题并发布一个具有最少配置和最少代码的示例来显示您的问题。就目前而言,这个问题相当广泛。
-
已更新 :) (对不起,我一个人给了通知...)
标签: snakemake