zoukankan      html  css  js  c++  java
  • 【R语言代码速记】利用SSRMMD开发SSR引物及结果整理

    海量的高通量测序数据为微卫星(SSR)标记开发提供了便利条件,MISA等一大批SSR引物开发软件被开发出来,但这些软件要么不能筛选有多态性的位点,要么仅限于linux平台,要么依赖的其他软件比较多,总而言之,是对菜鸟新手不友好。

    幸运的是,我找到了四川农业大学刘亚西教授等去年发布的SSRMMD软件,仅需要一个perl脚本(SSRMMD.pl)就可以实现多态性SSR位点的筛选,再需要一个脚本(connectorToPrimer3.pl)就可以实现在primer3里开发引物,而且这两个脚本还被贴心地编译成exe文件,无需安装perl也能使用。

    不过,其输出的位点信息文件和引物信息文件是分离的,不太符合自己的需求,故针对自己的数据分析写了一段R脚本整理结果。

    Gou X, Shi H, Yu S, et al. SSRMMD: A Rapid and Accurate Algorithm for Mining SSR Feature Loci and Candidate Polymorphic SSRs Based on Assembled Sequences. Front Genet. 2020;11:706. Published 2020 Jul 27. doi:10.3389/fgene.2020.00706
     
    首先,开发针对两个个体(AU和EU)开发多态性引物,可用 -h 查看两个脚本命令的帮助文档
    perl SSRMMD.pl -f1 input/AU.fasta -f2 input/EU.fasta -p 1 -o output -mo (2=7,3=6,4=5)
    perl connectorToPrimer3.pl -i output/AU.fasta-and-EU.fasta.compare -s 2 -o co_primers.txt -us 100-250

    因为数量不符合我的要求,然后分别开发两个个体的ssr引物

    :: AU
    perl SSRMMD.pl -f1 input/AU.fasta -p 0 -o output_AU -mo (3=6, 4=5) perl connectorToPrimer3.pl -i output_AU/AU.fasta.SSRs -s 1 -o AU_primers.txt -us 100-250 :: EU perl SSRMMD.pl -f1 input/EU.fasta -p 0 -o output_EU -mo (3=6, 4=5) perl connectorToPrimer3.pl -i output_EU/EU.fasta.SSRs -s 1 -o EU_primers.txt -us 100-250

    把序列信息、位点信息和引物信息汇总到一块,并提取需要的列;此外,把以上三部分位点合并到一块写入文件保存。

    # 整理SSRMMD的输出结果
    # 刘乐乐 liulele622@163.com
    # 2021年8月15日
    
    # 载入需要的软件包
    library(tidyverse) #优雅地操纵数据
    library(Biostrings)#其readDNAStringSet函数用于读入fasta文件
    
    # 载入个体AU的fasta序列信息
    au_fst <- readDNAStringSet("AU.fasta")
    au <- paste(au_fst)
    names(au) <- gsub(" ", "_", names(au_fst)) #用_代替空格
    # 载入另一个个体EU的fasta序列信息
    eu_fst <- readDNAStringSet("EU.fasta")
    eu <- paste(eu_fst)
    names(eu) <- gsub(" ", "_", names(eu_fst))
    
    # 载入SSRMMD.pl的输出
    au_ssr <- read.delim("AU.fasta.SSRs", sep = "\t", header = TRUE)
    eu_ssr <- read.delim("EU.fasta.SSRs", sep = "\t", header = TRUE)
    co_ssr <- read.delim("co_SSRs.txt", sep = "\t", header = TRUE)
    
    # 载入connectorToPrimer3.pl的输出
    co_primer <- read.delim("co_primers.txt", sep = "\t", header = TRUE)
    au_primer <- read.delim("AU_primers.txt", sep = "\t", header = TRUE)
    eu_primer <- read.delim("EU_primers.txt", sep = "\t", header = TRUE)
    
    # 整理多态性SSR位点信息
    co_res <-co_primer %>% 
      mutate(number = floor(id),
             name = paste0("CO_", number)) %>%
      left_join(co_ssr, by = "number") %>%
      mutate(motif = fasta1_motif,
             repeat_number = paste(fasta1_repeat_number, fasta2_repeat_number, sep = ","),
             seq = au[fasta1_id]) %>%
      select(name, forward_primer, reverse_primer, motif, repeat_number, produce_size, seq, fasta1_id) 
    
    # 整理个体AU的SSR位点信息,随机筛选150个位点
    au_res <- au_primer %>%
      mutate(number = floor(id),
             name = paste0("AU_", number)) %>%
      slice_sample(n = 150)%>%
      select(-id) %>%
      left_join(au_ssr, by = "number") %>%
      mutate(fasta1_id = id,
             seq = au[id]) %>%
      select(name, forward_primer, reverse_primer, motif, repeat_number, produce_size, seq, fasta1_id,)
    
    # 整理个体EU的SSR位点信息,随机筛选150个位点
    eu_res <- eu_primer %>%
      mutate(number = floor(id),
             name = paste0("EU_", number)) %>%
      slice_sample(n = 150)%>%
      select(-id) %>%
      left_join(eu_ssr, by = "number") %>%
      mutate(fasta1_id = id,
             seq = eu[id]) %>%
      select(name, forward_primer, reverse_primer, motif, repeat_number, produce_size, seq, fasta1_id)
    
    # 汇总到一块
    res <- rbind(co_res, au_res, eu_res)
    
    # 去重
    #which(duplicated(res$fasta1_id)==TRUE)
    #res_c <- res[-c(16, 80),]
    #which(duplicated(res_c$fasta1_id)==TRUE)
    
    write_csv(res_c, "ssr_res.csv")
    

    更新2021年8月29日,

    感谢软件作者苟香建勘误和指导。当我们获得的位点数量不足时,可以使用参数 -me 进行对SSR侧翼的序列保守性要求进行调整。

    这里我想给您推荐一个参数(-me),可以用来调整检查SSR侧翼序列保守性的算法。由于您在计算中对-me采用的默认设置(NO),这样设置后,SSR的侧翼序列必须是绝对保守的,不允许任何的碱基错配/缺失。您可以修改-me的设置,比如设置为NW,即使用Needlman-Wunsch算法来检查SSR侧翼序列保守性,这样SSR的侧翼序列就可以允许一定的碱基错配,或许能增加你的结果数量。



  • 相关阅读:
    基础总结深入:数据类型的分类和判断(数据、内存、变量) 对象 函数 回调函数 IIFE 函数中的this 分号
    BOM 定时器 通过修改元素的类来改变css JSON
    事件 事件的冒泡 事件的委派 事件的绑定 事件的传播
    DOM修改 使用DOM操作CSS
    包装类 Date Math 字符串的相关的方法 正则表达式 DOM DOM查询
    数组 call()、apply()、bind()的使用 this arguments
    autocad 二次开发 最小包围圆算法
    win10 objectarx向导在 vs2015中不起作用的解决办法
    AutoCad 二次开发 jig操作之标注跟随线移动
    AutoCad 二次开发 文字镜像
  • 原文地址:https://www.cnblogs.com/liulele/p/15143493.html
Copyright © 2011-2022 走看看