目的:

  1. 计算自定义模序在所有蛋白质的匹配位点和次数

  2. 输出超过阈值的蛋白质序列到Hit_sequences.fasta

  3. Hit_sequences.fasta中序列用小写字母,匹配用大写字母

  4. 返回一个数据框,内容包存储ID、注释行(anno)括——、长度(len)、匹配位置(Position),匹配次数(Hits),相应序列(tag)

一、问题思考:

1. 如何快速计算匹配位点

2. 输出文件如何构建

>序列ID(ACCESSION)

序列内容

  

二、 流程图

三、 代码详解

  1. 1 pattern_match<-function(pattern, sequences, hit_num){
  2. 2 # 1. 因为字符型在数据框中被设置为因子型所以需要转换;
  3. 3 # 2. 返回匹配起始位置,以及匹配长度(属性值:match.length),返回值为列表
  4. 4 pos<-gregexpr(pattern, as.character(sequences[, 4]), perl=T)
  5. 5 posv<-unlist(lapply(pos, paste, collapse=",")) # 把每条序列的匹配起始位置用“,”连接
  6. 6 posv[posv == -1]<-0
  7. 7 fun<-function(x){
  8. 8 if(x[1] == -1)
  9. 9 0
  10. 10 else
  11. 11 length(x)
  12. 12 }
  13. 13 hitsv<-unlist(lapply(pos, fun)) # 获取每条序列匹配次数
  14. 14 sequences<-data.frame(sequences[, 1:3], Position = as.vector(posv),
  15. 15 Hits = hitsv, sequences[, 4]) # 构建数据框:序列id,注释,长度,Position(匹配位置),Hits(匹配次数),序列内容
  16. 16 tag<-gsub("([A-Z])", "\\L\\1", as.character(sequences[sequences[, 5]>hit_num,6]),
  17. 17 perl=T, ignore.case = T) # 把蛋白质序列中匹配次数大于阈值的序列转换成小写字母,这里的perl = T 为必须
  18. 18 pattern2<-paste("(", pattern, ")", sep="" ) # 重新构建模式,这样做是因为没法在模式中引入变量,变通之后就可以
  19. 19 tag<-gsub(pattern2, "\\U\\1", tag, perl=T, ignore.case=T ) # 把匹配到的模式转换为大写
  20. 20 export<-data.frame(sequences[sequences[, 5]>hit_num, -6], tag) # 构建输出数据框,大于阈值的蛋白质序列所有信息
  21. 21 selected<-export
  22. 22 # 构建写入文件的数据框格式,包括“>序列号”和序列内容
  23. 23 export<-data.frame(Acc = paste(">",export[, 1], sep = ""), seq = export[, 6])
  24. 24 # 先转置->转换为字符型->转换为向量(按列合并)
  25. 25 # e.g:x<-matrix(1:4,nrow = 2, byrow = T); as.vector(x); 结果为1 3 2 4
  26. 26 write.table(as.vector(as.character(t(export))), file="Hit_sequences.fasta", quote = F,
  27. 27 row.names = F, col.names = F)
  28. 28 cat("含有模序\"", pattern, "\"超过", hit_num,
  29. 29 "个的所有蛋白序列已写入当前工作目录下的文件‘Hit_sequences.fasta’", "\n", seq = "")
  30. 30 cat("极度嗜盐古菌蛋白组中以下序列含有模序\"", pattern, "\"的数量超过", hit_num, "个:", "\n", seq = "")
  31. 31 print(selected[, 1:5])
  32. 32 selected
  33. 33 }

四、调用函数,查看结果(这里需要用到No.1 R语言在生物信息中的应用——序列读取及格式化输出的结果)

  1. setwd("E:/bioinfor/bioBook/") # 设定工作目录
  2. rm(list = ls()) # 清空变量
  3. my_file<-"seq.txt" # 指定序列文件
  4. source("./seq_import.R") # 载入函数
  5. my_sequences<-seq_import(file = my_file) # 调用函数
  6.  
  7. source("./pattern_match.R") # 载入函数
  8. hit_sequences<-pattern_match(pattern = "H..H{1,2}", sequences = my_sequences,
  9. hit_num = 2) # 调用函数

五、结果截图:

六、问题解决

  1. 如何快速计算匹配位点

  1. gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
  2. fixed = FALSE, useBytes = FALSE)
  3.  
  4. 作用:返回匹配到的字串的起始位置,以及匹配长度(属性值),匹配所有元素的所有位置.未匹配到返回-1

   ->  grepexpr函数可以返回匹配位点的起始位置,计算起始位置个数就可以快速计算匹配位点

  2. 输出文件如何构建

No.2 R语言在生物信息中的应用—模式匹配的更多相关文章

  1. No.1 R语言在生物信息中的应用——序列读取及格式化输出

    目的:读入序列文件(fasta格式),返回一个数据框,内容包括--存储ID.注释行(anno).长度(len).序列内容(content) 一.问题思考: 1. 如何识别注释行和序列内容行 2. 如何 ...

  2. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  3. 概率图模型 基于R语言 这本书中的第一个R语言程序

    概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...

  4. [R语言]forecast.Arima中使用xreg报错

    问题: 使用forecast.Arima对带xreg的arima模型进行预测,报xreg Error pre.m4x <- forecast.Arima(m4x, h = 20, xreg = ...

  5. R语言读取matlab中数据

    1. 在matlab中将数据保存到*.mat 文件夹 save("data.mat","data","label")#将data和label ...

  6. R语言使用过程中出现的问题--读取EXCEL文件

    方法一: 按照R导论中的方法,使用RODBC包, library(RODBC) channel<-odbcConnectExcel("file.xlsx") da2<- ...

  7. R语言数据框中,用0替代NA缺失值

    1.用0替代数据框中的缺失值NA 生成数据框: > m <- matrix(sample(c(NA, :), , replace = TRUE), ) > d <- as.da ...

  8. R语言判断向量中是否存在一个元素

    判断ori_data[,1]中是否存在元素a: a %in% ori_data[,1] 如果存在返回 true,否则返回 false    

  9. R语言使用过程中出现的问题--attach()函数的使用

    使用attach(file)时,一定要配合使用detach(file),否则再此运行程序时极易出现问题,The following objects are masked ... 此外工作空间中不能有与 ...

随机推荐

  1. 使用json-path解析json

    在我们的日常开发中,有时候需要从一个json字符串中获取一个值,或者从一段json字符串中获取到某些值,如果先使用Gson或Jackson转换成java对象在获取值,有些时候是很麻烦的,那么有没有一种 ...

  2. 2021.10.7考试总结[NOIP模拟71]

    信心赛,但炸了.T3SB错直接炸飞,T4可以硬算的组合数非要分段打表求阶乘..T2也因为一个细节浪费了大量时间.. 会做难题很好,但首先还是要先把能拿的分都拿到. T1 签到题 结论:总可以做到对每个 ...

  3. android tcp通讯

    Andoird TCP通讯 前言 最近在写一个即时通讯的项目,有一些心得,写出来给大家分享指正一下. 简单描述一下这个项目: 实时查询车辆运行状态的项目,走TCP通迅. 接口采用GZIP压缩. 后台是 ...

  4. A*,IDA*—高档次的暴搜

    A*通过评价函数来判断当前状态是否可以到达最终状态(即可行性剪枝),来减少不必要的搜索. 例题--P2324 [SCOI2005]骑士精神 我们通过当前不在指定位置上的棋子个数为评价函数,\(used ...

  5. 确定两串乱序同构 牛客网 程序员面试金典 C++ Python

    确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...

  6. cf Learn from Life (简单贪心)

    有N个人站在一楼.一个电梯最多承载K个人. 每个人都有一个想去的楼层.f[1]....f[N]. f[i]属于[2,2000] 从a层到b层需花费abs(a-b)秒. 问电梯送完所有人然后回到一楼至少 ...

  7. docker创建本地主机实例Virtualbox 驱动出错

    宿主机系统:Centos7 64位 创建主机实例Virtualbox 命令:docker-machine create -d virtualbox test 连接centos工具:Finalshell ...

  8. 为什么IDEA不推荐你使用@Autowired ?

    @Autowired注解相信每个Spring开发者都不陌生了!在DD的Spring Boot基础教程和Spring Cloud基础教程中也都经常会出现. 但是当我们使用IDEA写代码的时候,经常会发现 ...

  9. 重装系统——联想window 10

    大四了,读了四年大学,唉,混的,啥也不会,工作也找不到,真的不知道这大学四年到底干了什么.专业是计算机方向的,但居然,不敢,也不会装电脑系统,大学四年的文件都是乱放的,更那个的是,有些软件卸载不完全, ...

  10. Python推导式详解,带你写出比较精简酷炫的代码

    Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...