我有一个文件(mydata.txt),其中包含许多fasta格式的外显子序列。我想找到每个DNA序列的开始('atg')和停止('taa','tga','tag')密码子(考虑到框架)。我尝试使用matchPattern
(Biostrings
R包中的函数)来查找这些氨基酸:
例如mydata.txt可以是:
>a
atgaatgctaaccccaccgagtaa
>b
atgctaaccactgtcatcaatgcctaa
>c
atggcatgatgccgagaggccagaataggctaa
>d
atggtgatagctaacgtatgctag
>e
atgccatgcgaggagccggctgccattgactag
file=read.fasta(file="mydata.txt")
matchPattern( "atg" , file)
注意:read.fasta是seqinr
包中用于导入fasta格式文件的函数。
但是这个命令不起作用!如何使用此功能在每个外显子序列中查找起始和终止密码子? (没有移帧)
答案 0 :(得分:2)
我很难相信其中一个BioC软件包尚未完成,但如果您想使用基本R功能,请考虑使用gregexpr
x <- c(a='atgaatgctaaccccaccgagtaa',
b='atgctaaccactgtcatcaatgcctaa',
c='atggcatgatgccgagaggccagaataggctaa',
d='atggtgatagctaacgtatgctag',
e='atgccatgcgaggagccggctgccattgactag')
starts<-lapply(gregexpr("atg", x), function(x) x[ (x-x[1] %% 3) == 0])
stops <- mapply(function(strg, starts) {poss <- gregexpr("taa|tga|tag", strg) ; poss[[1]][ ( (poss[[1]]-starts) )%% 3 == 0]}, x, starts=unlist(starts))
stops
#--------------
$a
[1] 22
$b
[1] 25
$c
[1] 7 31
$d
[1] 22
$e
[1] 31
通过检查距离是否可被3整除,检查终止密码子是否在“框内”读取:
> (25-1)%%3
[1] 0
答案 1 :(得分:2)
matchPattern
的'subject'参数是一个特殊对象(例如XString)。您可以将序列转换为XStrings,方法是使用粘贴并使用?BString
折叠它们。
所以,使用您的数据:
file = read.fasta(file = "mydata.txt")
# find 'atg' locations
atg <- lapply(file, function(x) {
string <- BString(paste(x, collapse = ""))
matchPattern("atg", string)
})
atg[1:2]
# $a
# Views on a 18-letter BString subject
# subject: atgacccccaccgagtaa
# views:
# start end width
# [1] 1 3 3 [atg]
#
# $b
# Views on a 21-letter BString subject
# subject: atgcccactgtcatcacctaa
# views:
# start end width
# [1] 1 3 3 [atg]
举一个简单的例子,找出序列中'atg'的数量和位置:
sequence <- BString("atgatgccatgcccccatgcatgatatg")
result <- matchPattern("atg", sequence)
# Views on a 28-letter BString subject
# subject: atgatgccatgcccccatgcatgatatg
# views:
# start end width
# [1] 1 3 3 [atg]
# [2] 4 6 3 [atg]
# [3] 9 11 3 [atg]
# [4] 17 19 3 [atg]
# [5] 21 23 3 [atg]
# [6] 26 28 3 [atg]
# Find out how many 'atg's were found
length(result)
# [1] 6
# Get the start site of each 'atg'
result@ranges@start
# [1] 1 4 9 17 21 26
另外,请查看?DNAString
和?RNAString
。它们类似于BString
,只限于核苷酸特征,可以快速比较DNA和RNA序列。
编辑以解决评论中提到的帧移位问题: 您可以使用@DWin提到的模数技巧对结果进行子集化,以获得帧中的atg。
# assuming the first 'atg' sets the frame
in.frame.result <- result[(result@ranges@start - result@ranges@start[1]) %% 3 == 0]
# Views on a 28-letter DNAString subject
# subject: ATGATGCCATGCCCCCATGCATGATATG
# views:
# start end width
# [1] 1 3 3 [ATG]
# [2] 4 6 3 [ATG]
# There are two 'atg's in frame in this result
length(in.frame.result)
# [1] 2
# With your data:
file = read.fasta(file = "mydata.txt")
atg <- lapply(file, function(x) {
string <- BString(paste(x, collapse = ""))
result <- matchPattern("atg", string)
result[(result@ranges@start - result@ranges@start[1]) %% 3 == 0]
})