在Biostrings中,我加载了427,351个长度为11个核苷酸的DNA序列的fasta文件。
my.seq<-readDNAStringSet("my.fasta", "fasta")
然后,我生成了一个矩阵,它计算了11个位置中每个位置的特定核苷酸的总数:
my.pfm<-consensusMatrix(my.seq)
>my.pfm
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
A 113370 120216 109984 40729 150681 11 340936 41684 75946 150648 84290
C 98927 107171 99251 110222 76286 427265 25668 256664 191010 103889 139625
G 118545 93632 95588 74975 138899 9 95 91414 64966 66896 113694
T 96509 106332 122528 201425 61485 66 60652 37589 95429 105918 89741
M 0 0 0 0 0 0 0 0 0 0 0
R 0 0 0 0 0 0 0 0 0 0 0
W 0 0 0 0 0 0 0 0 0 0 0
S 0 0 0 0 0 0 0 0 0 0 0
Y 0 0 0 0 0 0 0 0 0 0 0
K 0 0 0 0 0 0 0 0 0 0 0
V 0 0 0 0 0 0 0 0 0 0 0
H 0 0 0 0 0 0 0 0 0 0 0
D 0 0 0 0 0 0 0 0 0 0 0
B 0 0 0 0 0 0 0 0 0 0 0
N 0 0 0 0 0 0 0 0 0 0 1
- 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0
. 0 0 0 0 0 0 0 0 0 0 0
你能看到的是我有一个&#34; N&#34;核苷酸存在于我的第11位(第N行,第11列)的序列中。
下一步是制作一个位置矩阵频率,但是,只有在行的列数总和时才能实现这一点&#34; A&#34;,&#34; C&#34;,&#34; G&# 34;和&#34; T&#34;是平等的。在上面的例子中,由于N个基数,第11列的总和将比所有其他的少一个。
编写consensusMatrix函数的最佳方法是什么,以便将所有非A,C,G和T碱基适当地分类为A,C,G,T或它们的组合?由于N代表4个碱基中的任何一个,因此对于N的每个实例,0.25将被添加到第11列的A,C,G和T值。但是,应该为所有其他非A,C写入函数, G和T核苷酸是如此适当地分配给A,C,G,T的正确比例?
例如,Y = C或T,因此对于Y的每个实例,0.5将被添加到C,0.5将被添加到该列的T值。我可以看到一个问题,如果我们有类似V代码的东西,因为它可以是G,A或C,在这种情况下,0.33333将被添加到该列的每个V实例。
我尝试过:
my.pfm<-consensusMatrix(my.seq,ambiguityMap=IUPAC_CODE_MAP)
Error in .local(x, as.prob, shift, width, ...) :
unused argument (ambiguityMap = c("A", "C", "G", "T", "AC", "AG", "AT", "CG", "CT", "GT", "ACG", "ACT", "AGT", "CGT", "ACGT"))
据我了解,除了A,C,G,T之外的其他任何东西都应该有某种特征向量告诉函数该怎么做,但我似乎无法弄明白。
这里的想法是拥有某种定义功能,无论将来遇到多少种歧义代码都会有效。
注意:我不想从数据集中删除包含A,C,G或T以外任何内容的整个序列。
答案 0 :(得分:2)
这样的事情,但从评论看来,你似乎在为这类数据提出错误的问题。
#get sum of non ACGT and divide by 4
props <- colSums(my.pfm[ !rownames(my.pfm) %in% c("A","C","G","T"),]) / 4
#add it back to ACGT rows
t(
apply(
my.pfm[ rownames(my.pfm) %in% c("A","C","G","T"),], 1, function(i)
props + i))
#output
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
# A 113370 120216 109984 40729 150681 11 340936 41684 75946 150648 84290.25
# C 98927 107171 99251 110222 76286 427265 25668 256664 191010 103889 139625.25
# G 118545 93632 95588 74975 138899 9 95 91414 64966 66896 113694.25
# T 96509 106332 122528 201425 61485 66 60652 37589 95429 105918 89741.25