感谢diliop为我之前的问题提出的精彩解决方案。
How to get pair-wise "sequence similarity score" for ~1000 proteins?
为了建立在这个答案的基础上,我尝试编写一个循环来获得1000个蛋白质的所有成对的“序列相似性得分”,具有以下代码。
for (i in 1:1000){
score <- score(pairwiseAlignment(seqs[[i]]$seq, seqs[[i+1]]$seq, substitutionMatrix=BLOSUM100, gapOpening=0, gapExtension=-5))}
但是,我很难将每个分数转换为data.frame
,这样会自动列出所有分数?
seq1 seq2 score
seq1 seq3 score
seq1 seq4 score
....
seq1000 seq1000 score
专家可以给我一些关于如何获得1000 x 1000蛋白质的更多提示吗?
答案 0 :(得分:5)
这似乎是您可以使用expand.grid执行的任务并应用:
seqs <-c("seq1","seq2","seq3"); dat <- expand.grid(seqs,seqs, stringsAsFactors=FALSE)
dat
apply(dat, 1, function(seq) paste(seq[1], seq[2], sep="--") )
#[1] "seq1--seq1" "seq2--seq1" "seq3--seq1" "seq1--seq2" "seq2--seq2" "seq3--seq2" "seq1--seq3"
#[8] "seq2--seq3" "seq3--seq3"
不可否认,如果函数返回f(seq1,seq2)与f(seq2,seq1)相同的值,则会有重复工作,但如果要获得效率,可以限制应用的第一个参数:
datr <- dat[dat[,1] > dat[,2] , ]
因此,如果您制作了这样一个限制行数据框datr
,那么可能是:
datr$score <- apply(datr, 1 , function(seq) {
score(pairwiseAlignment( seq[1], seq[2],
substitutionMatrix=BLOSUM100, gapOpening=0, gapExtension=-5)) }
(对最后一行中的参数一无所知。你真的应该学会在你的例子中加入一些真实的数据,并列出所需的包library
或require
。< / p>