gpt4 book ai didi

snakemake - 如何从在snakemake中不共享命名约定的单个输入文件生成多个输出文件?

转载 作者:行者123 更新时间:2023-12-04 07:21:38 27 4
gpt4 key购买 nike

我已经搜索了一段时间,this 线程是我得到的最接近的线程,但无法使用我的设置。
我想做的事:
我有一个文本文件,其中每一行都有一个 ID 和一个数据点

1234 data2
5678 data3
...
我想收集与我的配置文件中的某些 ID 相对应的行,并将它们写入根据 ID 值(1234 或 5678)命名的自己的文件中
# config.yaml
IDs:
ID1: 1234
ID2: 5678
当我在没有snakemake的情况下执行此操作时,我只是在bash脚本中循环了ID列表并为它们搜索了文本文件,但是我无法使用snakemake完成此操作。
要么我在目标中遇到通配符问题,要么我的 expand 函数将所有 ID 提供给 shell 中的 grep 命令,或者在遵循已接受的链接答案时,我得到“所有规则缺少输入文件:And_Laa A_log”我可以共享我现在所拥有的,但我认为正确的方法与我所拥有的相去甚远,它只会让每个人都感到困惑:
configfile: "config.yaml"

# Trying to replicate stackoverflow answer
speakers = {
"1": "And_Laa",
"2": "A_log"
}

def get_speaker(wildcards):
# return expand("{speaker}", speaker=config["speakers"])
return speakers[wildcards.speaker]

rule all:
input:
# expand("{speaker}_wav-list", speaker=config[speakers])
expand("{speaker}", speaker=speakers.values())

# Selecting all the audiofiles for the speakers from a very large file
rule select_speaker_files:
input:
wav=config["files"]["wavs"]
output:
speaker="{speaker}_wav-list"
params:
speaker=get_speaker,
shell:
'grep "{params.speaker}" {input.wav} > {output.speaker}'

最佳答案

首先,我猜你所说的“扬声器”不是字典的值,而是关键。所以你rule all应该像这样扩展:

rule all:
input:
expand("{speaker}", speaker=speakers)
接下来,这条规则字面意思是:“我需要两个文件名为 12 的文件。”但是没有规则可以生成具有这些名称的文件。你有:
rule select_speaker_files:
output:
speaker="{speaker}_wav-list"
第三条规则声称:“我可以生成一个名称以 _wav-list 结尾的文件。”绝对没有可能产生管道需要创建的东西的规则。你可能的意思是:
rule all:
input:
expand("{speaker}_wav-list", speaker=speakers)
在这种情况下,规则至少是一致的。

关于snakemake - 如何从在snakemake中不共享命名约定的单个输入文件生成多个输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68454510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com