在R中使用Primer3和NCBI-BLAST进行高通量引物设计
1 Primer3 使用简介
Primer3 是PCR引物设计软件,Debian下可以直接使用新立得查找安装或者用apt-get安装。Windows下安装需要编译,如果不想或者不能自己编译就安装EMBOSS,它帮你搞好了,在安装目录下可以找到 primer3_core.exe 和 primer32_core.exe 。发表论文可以引用下面文献:
Untergrasser A, Cutcutache I, Koressaar T, Ye J, Faircloth BC, Remm M, Rozen SG (2012) Primer3 - new capabilities and interfaces. Nucleic Acids Research40(15):e115 Koressaar T, Remm M (2007) Enhancements and modifications of primer design program Primer3Bioinformatics 23(10):1289-91
1.1 Primer3 命令行参数
命令行相当简单:
primer3_core 参数们
参数都是可选的,包括:
参数 | 含义 |
---|---|
-format_output | 产生易于人读的输出结果,否则产生易于机读输出(用于编程) |
-io_version=n | n为3或4(默认),n=3表示兼容低版本 |
-p3_settings_file=<file_path> | 指定p3的设置文件,用于全局参数设置 |
-echo_settings_file | 回显p3设置文件的内容 |
-strict_tags | 要求严格的标签 |
-output=<file_path> | 指定结果输出文件 |
-error=<file_path> | 指定错误信息保存的文件名 |
input_file | 包含序列相关引物设计详细信息的文件 |
1.2 Primer3参数设置文件
Primer3引物设计的一些详细参数通过“标签”进行设置。与序列相关的标签名称以“SEQUENCE”开头,与引物相关的标签以“PRIMER”开头。PRIMER标签可以用于所有模板,所以又称为全局标签。标签使用 p3_settings_file 和 input_file 文件设置。
p3_settings_file 的格式为:
Primer3 File - http://primer3.sourceforge.net P3_FILE_TYPE=settings 全局标签名=参数值 =
前两行和最后的等号是必需的。标签设置行可以有很多,无顺序,但每个标签的设置内容必需在一行内。 p3_settings_file 只能设置 PRIMER_XXX 等全局标签。
input_file 的格式为:
标签名=参数值 =
对于绝大多数的任务来说 SEQUENCE_TEMPLATE (模板序列)是必需的参数。最后的等号也必需,表示一个序列的参数设定结束。一个 input_file 可以设置很多序列的标签,按上面的格式重复即可。多序列任务还应该设置序列标识 SEQUENCE_ID 标签。 input_file 也可以设置 PRIMER_XXX 类标签。
标签的具体设置请参考Primer3的使用帮助。
NCBI BLAST 就不用多说了,安装也简单,在引物设计结束前进行BLAST以保证引物的基因特异性。
2 高通量引物设计
下面的R代码包含引物设计的几个步骤:
- 读取FASTA格式的模板序列文件
- 设置Primer3引物设计的参数并产生引物对(参数主要针对qPCR实验,产物长度70-120bp,其他参数请看 p3.para 变量内容)
- 解析Primer3输出结果
- 对引物进行本地BLAST比对
- 解析BLAST输出结果
- 筛选引物并以CSV文件输出
library(tcltk) library(Biostrings) #* 读取FASTA格式序列 seqs.fasta.file <- tk_choose.files(default = "~//", multi = FALSE, caption = "Sequence file") seqs <- readDNAStringSet(seqs.fasta.file) seqs.path <- dirname(seqs.fasta.file) #* 设置Primer3参数文件 p3_settings_file p3.paras <- list(PRIMER_TASK="generic",PRIMER_NUM_RETURN=1000,PRIMER_DNA_CONC=500,PRIMER_DNTP_CONC=0.8,PRIMER_SALT_CORRECTIONS=1,PRIMER_SALT_MONOVALENT=50,PRIMER_SALT_DIVALENT=1.5,PRIMER_MAX_END_GC=2,PRIMER_MIN_GC=35,PRIMER_MAX_GC=65,PRIMER_MIN_TM=58,PRIMER_MAX_TM=64,PRIMER_OPT_TM=60,PRIMER_MIN_SIZE=18,PRIMER_MAX_SIZE=26,PRIMER_OPT_SIZE=20,PRIMER_PAIR_MAX_DIFF_TM=2,PRIMER_PRODUCT_SIZE_RANGE="70-120",PRIMER_PICK_ANYWAY=1) p3.paras <- paste(names(p3.paras), '=', p3.paras, sep='') p3.paras <- c("Primer3 File - http://primer3.sourceforge.net","P3_FILE_TYPE=settings",p3.paras,"=") p3.settings.file <- file.path(seqs.path, "p3.settings.file") writeLines(p3.paras, p3.settings.file) tmpfiles <- p3.settings.file #* 设置Primer3参数文件 input_file seq.ids <- paste("SEQUENCE_ID=", names(seqs), sep='') seq.templates <- paste("SEQUENCE_TEMPLATE=", as.character(seqs), sep='') content.input.file <- paste(seq.ids, seq.templates, '=', sep="\n") input.file <- file.path(seqs.path, "p3.input.file") writeLines(content.input.file, input.file) tmpfiles <- c(tmpfiles, input.file) #* 运行 Primer3 获取引物 output.file <- file.path(seqs.path, "p3.temp1") p3.settings <- paste("-p3_settings_file=", p3.settings.file, sep='') p3.output <- paste("-output=", output.file, sep='') cmd <- paste("primer3_core", p3.settings, p3.output, input.file) system(cmd) tmpfiles <- c(tmpfiles, output.file) #* 解析 Primer3 输出文件 # 下面只保留了引物名称、序列和TM值,需要更多参数请自己设置 p3.results <- readLines(output.file) group.start <- grep("SEQUENCE_ID", p3.results) group.end <- c(group.start[-1]-1, length(p3.results)) seq.ids <- names(seqs) for(i in 1:length(seq.ids)){sel <- group.start[i]:group.end[i]p3.results[sel] <- paste(seq.ids[i], p3.results[sel], sep="_") } writeLines(p3.results, output.file) primers.seq <- p3.results[grep("(LEFT|RIGHT)_[0-9]+_SEQUENCE=", p3.results)] primers.name <- gsub("(.+)_PRIMER(_[^=]+)_SEQUENCE.*", "\\1\\2", primers.seq) primers.name <- gsub("LEFT", "L", primers.name) primers.name <- gsub("RIGHT", "R", primers.name) primers.seq <- gsub(".+=(.+)", "\\1", primers.seq) primers.tm <- p3.results[grep("(LEFT|RIGHT)_[0-9]+_TM=", p3.results)] primers.tm <- gsub(".+=(.+)", "\\1", primers.tm) primers <- data.frame(name=primers.name, seq=primers.seq, TM=primers.tm) #* BLAST 分析,输出便于程序解析的 m8 格式 blast.in <- file.path(seqs.path, "blast.in") xxx <- paste(">", primers.name, sep='') xxx <- paste(xxx, primers.seq, sep="\n") writeLines(xxx, blast.in) rm(xxx) tmpfiles <- c(tmpfiles, blast.in) blast.db <- tk_choose.files(default = "~//", multi = FALSE, caption = "BLAST database") blast.db <- sub("(.+)\\.[^\\.]+", "\\1", blast.db) blast.out <- file.path(seqs.path, "blast.out") cmd <- paste("blastall -p blastn -e 10000 -F F -m 8 -a 4 -i",blast.in, "-o", blast.out, "-d", blast.db) system(cmd) tmpfiles <- c(tmpfiles, blast.out) #* 解析 BALST 输出结果。 m8 结果共有12列,分别为: # 1. Query id # 2. Subject id # 3. % identity # 4. alignment length # 5. mismatches # 6. gap openings # 7. q.start # 8. q.end # 9. s.start # 10. s.end # 11. e-value # 12. bit score # 这里我们仅要求 q.start=1, q.end=引物长度 的比对结果有且仅有一个,即目标序列的匹配 blast.result <- read.table(blast.out, stringsAsFactors = FALSE)[,c(1,7,8)] sel <- blast.result[,2]==1 blast.result <- blast.result[sel,] primers.n <- length(primers.name) sel <- rep(FALSE, primers.n) for(i in 1:primers.n){sel.sub <- blast.result[,1]==primers.name[i]blast.sub <- blast.result[sel.sub,3]max.qend <- max(blast.sub)blast.sub <- blast.sub[blast.sub==max.qend]if(length(blast.sub)==1 & max.qend==nchar(primers.seq[i]))sel[i] <- TRUE } primers <- primers[sel,] #* 删除临时文件,输出结果 file.remove(tmpfiles) result.file <- file.path(seqs.path, "primer3.results.csv") write.csv(primers, result.file, quote=FALSE, row.names=FALSE)
Author: ZGUANG@LZU
Created: 2013-07-10 三 18:42
Emacs 24.3.1 (Org mode 8.0.5)
Validate XHTML 1.0
在R中使用Primer3和NCBI-BLAST进行高通量引物设计相关推荐
- MPB:南农韦中组-根际细菌产铁载体能力的高通量检测
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- iMeta | 南京农业大学韦中组开发多病原生物污染高通量快检平台
点击蓝字 关注我们 MBPD:践行一体化健康的多种病原细菌检测流程 iMeta主页:http://www.imeta.science 研究论文 ● 原文链接DOI: https://doi.org/1 ...
- #ncbi #blast
何为序列比对? 为确定两个或多个序列之间的相似性以至于同源性,而将它们按照一定的规律排列.将两个或多个序列排列在一起,标明其相似之处.序列中可以插入间隔(通常用短横线"-"表示). ...
- NCBI引物设计、检验引物特异性、检索基因序列、BLAST
B站upLily的储物间 NCBI 引物设计及检验引物特异性 primer-BLAST设计引物 进入primer-BLAST 1.进入ncbi中的BLAST 2.下拉选择primer-BLAST pr ...
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- 《机器学习与数据科学(基于R的统计学习方法)》——2.11 R中的SQL等价表述...
本节书摘来异步社区<机器学习与数据科学(基于R的统计学习方法)>一书中的第2章,第2.11节,作者:[美]Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区& ...
- csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍
csv文件示例 Welcome! If you want to start diving into data science and statistics, then data frames, CSV ...
- python随机森林筛选变量_变量重要性随机森林在R中是否有类似Python的rfpimp来分组共线变量...
早上好 我在R(randomForest,caret)中的随机林实现中使用置换重要性对变量进行排序.所有变量都是连续的,结果是明确的.在 为了处理共线特性Terence Parr,Jeremy How ...
- 在R中子集化数据框的5种方法
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 通常,我们在使用大型数据集时,只会对其中的一小部分感兴趣,用以进行特定分析. 那么,我们应该如 ...
- 使用 conda 和 Jupyter 在 R 中实现数据科学分析
前两篇文章我们介绍了 Jupyter Notebook 的一些基础用法,今天我们来介绍一下如何使用 conda 和 Jupyter 在 R 中开始一个数据科学项目. 在开始之前我们先要明确一个概念:K ...
最新文章
- 商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业
- 安卓连接linux软件,利用 Telnet 无线控制安卓手机 无需 Root
- OpenSession与getCurrentSession的区别
- java collection join_java – @ElementCollection @CollectionTable在一对多映射中
- ActionBarDisplayOptions展示选项的菜单
- Ubuntu中的launcher
- oracle11gR2静默安装
- employee setup in Organization unit
- C++判断进程id是否存在
- [HTML5]使用Box2dWeb模拟飞行箭矢
- java NIO 复习
- 自动控制原理(第七版)胡寿松 课本
- 我的世界服务器发消息有符号,我的世界彩色字体符号
- 用Python自动清理系统垃圾,再也不用360安全卫士了
- 【转】脸识别技术发展及实用方案设计
- Java+Swing+MySQL机票预订和管理系统
- PLSQL Developer13.0.4安装破解教程
- Vue2.0的页面模板
- 为什么计算机不能进行十进制,计算机为什么用二进制而不是十进制?
- 流程设计器与表单设计器(Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)