snakemake从输入文件名派生多个变量

如何解决snakemake从输入文件名派生多个变量

我在从输入文件名中导出变量时遇到问题-尤其是如果您要基于分隔符进行拆分时。我尝试了不同的方法(我无法使用),但到目前为止,唯一可行的方法最终还是失败了,因为它正在寻找变量的所有可能的变体(因此不存在输入文件)。

我的问题-输入文件以以下模式命名: 18AR1376_S57_R2_001.fastq.gz

一开始我对变量的初始定义:
SAMPLES,= glob_wildcards("../run_links/{sample}_R1_001.fastq.gz")

但是最后我的文件都被命名为18AR1376_S57,我想删除_S57(指的是样本工作表ID)。

我在搜索时发现的一种可行的方法是:
SAMPLES,SHEETID,= glob_wildcards("../run_links/{sample}_{SHEETID}_R1.001.fastq.gz"}
但它会查找sample和sheetid的所有可能组合,因此会查找不存在的输入文件。

然后我尝试了一种更基本的python方法:

SAMPLES,= glob_wildcards("../run_links/{sample}_R1_001.fastq.gz")
ID,=expand([{sample}.split("_")[0]],sample=SAMPLES)``

但这根本不起作用

然后我尝试保留原始的通配符 SAMPLES,= glob_wildcards("../run_links/{sample}_R1_001.fastq.gz") 但要定义新的输出文件名(基于我在另一个论坛上找到的说明)-但这给了我一个我不知道的语法错误。

rule trim:
    input:
        R1 = "../run_links/{sample}_R1_001.fastq.gz",R2 = "../run_links/{sample}_R2_001.fastq.gz"
    params:
        prefix=lambda wildcards,output: 
    output:
        R1_Pair = ["./output/trimmed/{}_R1_trim_PE.fastq".format({sample}.split("_")[0])],#or the below version
        R1_Sing = ["./output/trimmed/{}_R1_trim_SE.fastq".format(a) for a in {sample}.split("_")],R2_Pair = ["./output/trimmed/{}_R2_trim_PE.fastq".format(a) for a in {sample}.split("_")],R2_Sing = ["./output/trimmed/{}_R2_trim_SE.fastq".format(a) for a in {sample}.split("_")]
    resources:
        cpus=8
    log:
        "../logs/trim_{sample}.log"
    conda:
        "envs/trim.yaml"
    shell:
        """
        trimmomatic PE -trimlog {log} -threads {resources.cpus} {input.R1} {input.R2} {output.R1_Pair} {output.R1_Sing} {output.R2_Pair} {output.R2_Sing} HEADCROP:10 ILLUMINACLIP:scripts/Truseq-Adapter.fa:2:30:10 LEADING:20 TRAILING:20 SLIDINGWINDOW:4:20 MINLEN:50
        """

所以,有两个选择,

  1. 工作流程的开始:将样品分为样品ID和样品表ID
  2. 定义新的输出名称,并在{sample}的定界符_上使用split

有人对此有技巧吗? 谢谢

谢谢!

解决方法

我将使用一个简单的python字典来定义附加到fastq文件的样本名称,而不是使用glob_wildcards

import os
import re

d = dict()

fastqPath = "."
for fastqF in [f for f in os.listdir(fastqPath) if(re.match(r"^[\w-]+_R1_001\.fastq\.gz",f))]:
        s = re.search(r"(^[\w-]+)_(S\d+)_R1_(001.fastq.gz)",fastqF)
        samplename = s.group(1)
        fastqFfile = os.path.join(fastqPath,fastqF)
        fastqRfile = os.path.join(fastqPath,s.group(1) + "_" + s.group(2) + "_R2_" + s.group(3))
        if(os.path.isfile(fastqRfile)):
                d[samplename] = {"read1":os.path.abspath(fastqFfile),"read2":os.path.abspath(fastqRfile)}

然后,fastq输入文件非常易于使用:

rule all:
        input:
                expand("output/trimmed/{sample}_R1_trim_PE.fastq",sample=d)

rule trim:
        input:
                R1 = lambda wildcards: d[wildcards.sample]["read1"],R2 = lambda wildcards: d[wildcards.sample]["read2"]
        output:
                R1_Pair="output/trimmed/{sample}_R1_trim_PE.fastq",R1_Sing="output/trimmed/{sample}_R1_trim_SE.fastq",R2_Pair="output/trimmed/{sample}_R2_trim_PE.fastq",R2_Sing="output/trimmed/{sample}_R2_trim_SE.fastq"
        resources:
                cpus=8
        log:
                "../logs/trim_{sample}.log"
        conda:
                "envs/trim.yaml"
        shell:
                """
                trimmomatic PE -trimlog {log} -threads {resources.cpus} {input.R1} {input.R2} {output.R1_Pair} {output.R1_Sing} {output.R2_Pair} {output.R2_Sing} HEADCROP:10 I>
                """

注意:我删除了规则params中未使用的trim部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res