No.2 R语言在生物信息中的应用—模式匹配
目的:
1. 计算自定义模序在所有蛋白质的匹配位点和次数
2. 输出超过阈值的蛋白质序列到Hit_sequences.fasta
3. Hit_sequences.fasta中序列用小写字母,匹配用大写字母
4. 返回一个数据框,内容包存储ID、注释行(anno)括——、长度(len)、匹配位置(Position),匹配次数(Hits),相应序列(tag)
一、问题思考:
1. 如何快速计算匹配位点
2. 输出文件如何构建
>序列ID(ACCESSION)
序列内容
二、 流程图
三、 代码详解
1 pattern_match<-function(pattern, sequences, hit_num){
2 # 1. 因为字符型在数据框中被设置为因子型所以需要转换;
3 # 2. 返回匹配起始位置,以及匹配长度(属性值:match.length),返回值为列表
4 pos<-gregexpr(pattern, as.character(sequences[, 4]), perl=T)
5 posv<-unlist(lapply(pos, paste, collapse=",")) # 把每条序列的匹配起始位置用“,”连接
6 posv[posv == -1]<-0
7 fun<-function(x){
8 if(x[1] == -1)
9 0
10 else
11 length(x)
12 }
13 hitsv<-unlist(lapply(pos, fun)) # 获取每条序列匹配次数
14 sequences<-data.frame(sequences[, 1:3], Position = as.vector(posv),
15 Hits = hitsv, sequences[, 4]) # 构建数据框:序列id,注释,长度,Position(匹配位置),Hits(匹配次数),序列内容
16 tag<-gsub("([A-Z])", "\\L\\1", as.character(sequences[sequences[, 5]>hit_num,6]),
17 perl=T, ignore.case = T) # 把蛋白质序列中匹配次数大于阈值的序列转换成小写字母,这里的perl = T 为必须
18 pattern2<-paste("(", pattern, ")", sep="" ) # 重新构建模式,这样做是因为没法在模式中引入变量,变通之后就可以
19 tag<-gsub(pattern2, "\\U\\1", tag, perl=T, ignore.case=T ) # 把匹配到的模式转换为大写
20 export<-data.frame(sequences[sequences[, 5]>hit_num, -6], tag) # 构建输出数据框,大于阈值的蛋白质序列所有信息
21 selected<-export
22 # 构建写入文件的数据框格式,包括“>序列号”和序列内容
23 export<-data.frame(Acc = paste(">",export[, 1], sep = ""), seq = export[, 6])
24 # 先转置->转换为字符型->转换为向量(按列合并)
25 # e.g:x<-matrix(1:4,nrow = 2, byrow = T); as.vector(x); 结果为1 3 2 4
26 write.table(as.vector(as.character(t(export))), file="Hit_sequences.fasta", quote = F,
27 row.names = F, col.names = F)
28 cat("含有模序\"", pattern, "\"超过", hit_num,
29 "个的所有蛋白序列已写入当前工作目录下的文件‘Hit_sequences.fasta’", "\n", seq = "")
30 cat("极度嗜盐古菌蛋白组中以下序列含有模序\"", pattern, "\"的数量超过", hit_num, "个:", "\n", seq = "")
31 print(selected[, 1:5])
32 selected
33 }
四、调用函数,查看结果(这里需要用到No.1 R语言在生物信息中的应用——序列读取及格式化输出的结果)
setwd("E:/bioinfor/bioBook/") # 设定工作目录
rm(list = ls()) # 清空变量
my_file<-"seq.txt" # 指定序列文件
source("./seq_import.R") # 载入函数
my_sequences<-seq_import(file = my_file) # 调用函数
source("./pattern_match.R") # 载入函数
hit_sequences<-pattern_match(pattern = "H..H{1,2}", sequences = my_sequences,
hit_num = 2) # 调用函数
五、结果截图:
六、问题解决
1. 如何快速计算匹配位点
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE) 作用:返回匹配到的字串的起始位置,以及匹配长度(属性值),匹配所有元素的所有位置.未匹配到返回-1
-> grepexpr函数可以返回匹配位点的起始位置,计算起始位置个数就可以快速计算匹配位点
2. 输出文件如何构建
No.2 R语言在生物信息中的应用—模式匹配的更多相关文章
- No.1 R语言在生物信息中的应用——序列读取及格式化输出
目的:读入序列文件(fasta格式),返回一个数据框,内容包括--存储ID.注释行(anno).长度(len).序列内容(content) 一.问题思考: 1. 如何识别注释行和序列内容行 2. 如何 ...
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- 概率图模型 基于R语言 这本书中的第一个R语言程序
概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...
- [R语言]forecast.Arima中使用xreg报错
问题: 使用forecast.Arima对带xreg的arima模型进行预测,报xreg Error pre.m4x <- forecast.Arima(m4x, h = 20, xreg = ...
- R语言读取matlab中数据
1. 在matlab中将数据保存到*.mat 文件夹 save("data.mat","data","label")#将data和label ...
- R语言使用过程中出现的问题--读取EXCEL文件
方法一: 按照R导论中的方法,使用RODBC包, library(RODBC) channel<-odbcConnectExcel("file.xlsx") da2<- ...
- R语言数据框中,用0替代NA缺失值
1.用0替代数据框中的缺失值NA 生成数据框: > m <- matrix(sample(c(NA, :), , replace = TRUE), ) > d <- as.da ...
- R语言判断向量中是否存在一个元素
判断ori_data[,1]中是否存在元素a: a %in% ori_data[,1] 如果存在返回 true,否则返回 false
- R语言使用过程中出现的问题--attach()函数的使用
使用attach(file)时,一定要配合使用detach(file),否则再此运行程序时极易出现问题,The following objects are masked ... 此外工作空间中不能有与 ...
随机推荐
- 无网络下,配置yum本地源
1. 新建一个没有iso镜像文件的虚拟机: 2. 本地上传一个镜像文件(CentOS7的镜像),到虚拟机已创建的目录: 例如:上传一个镜像文件CentOS-7-x86_64-Everything-17 ...
- (五)、Docker 容器数据卷
1.什么是数据卷 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker comm ...
- Noip模拟69 2021.10.5
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...
- Noip模拟57 2021.9.20
规律总结:联考必爆炸 T1 2A 没$A$掉的大水题,但是是真的不知道$000$前面的$00$也算先导$0$,以后要长记性,这种东西不能再错了 再打三遍: $000$前面的$00$也算先导$0$ $0 ...
- STM32的I2C框图详解及通讯过程
STM32 的I2C 特性及架构 如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA ...
- 有向路径检查 牛客网 程序员面试金典 C++ Python
有向路径检查 牛客网 程序员面试金典 C++ Python 题目描述 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径. 给定图中的两个结点的指针DirectedGraphNode* a, ...
- Shooting Bricks题解
题目传送门 以后我绝对不会一直磕着一道题磕几个小时了...感觉还是自己节奏出了问题,不知为啥感觉有点小慌... 算了,其实再回头仔细看一下这个题dp的思路还是比较好想出来的,打代码之前一定要做好足够的 ...
- js 组合继承详解
目录 前言 原型链继承 构造函数继承 组合继承 前言 首先学习继承之前,要对原型链有一定程度的了解. 不了解可以去先阅读我另一篇文章,里面对原型链有一个较为详细的说明:js 原型链详解. 如果已经了解 ...
- C# StringBuilder和string
StringBuilder和string 1.string是引用类型还是值类型 MSDN官方说string是引用类型: 引用类型:引用分配栈内存,引用类型本身的数据存储在堆中: 值类型:在函数中创建, ...
- linux 虚拟网络设备的使用
1. linux 常见虚拟网络设备分类 常见虚拟网络设备有:bridge, tun/tap, veth-pairs, macvlan, macvtap等.有一篇博文写的挺好的,图文并茂:虚拟网络设备, ...