【发布时间】:2015-01-16 09:08:58
【问题描述】:
我有两个大矩阵,我想计算两者之间的相似度分数。但是,这些矩阵中有一些列包含间隙,所以我所做的是编写一个函数,该函数创建一个得分矩阵(1 表示相似度,0 表示不相似度)然后从矩阵创建 gaps 和 nogaps 向量并计算得分相应地
函数的打分部分见下图
ScoreMat <- align1 == align2
#find gaps and nogaps
gaps <- which(align1 == "-", arr.in=TRUE)
gaps <- gaps[,2]
gaps <-gaps[!duplicated(gaps) ]
nogaps <- 1:ncol(align1)
nogaps <- nogaps[-gaps]
#split ScoreMat into gaps and nogaps matrices
ScoreMatgaps <- ScoreMat[,gaps]
ScoreMatNogaps <- ScoreMat[,nogaps]
#calculate score
gapScore <- rowSums(ScoreMatgaps)
nogapScore <- rowSums(ScoreMatNogaps)
score <- cbind(gapScore,nogapScore)
当我想对我比其他人更感兴趣的特定列范围进行评分时,问题就开始了。因此,更大的函数包含有关如何对这些特定范围进行评分的行。但是,其中一些范围包含间隙,而另一些则没有。因此,对于有间隙的范围,该功能可以正常工作。但是对于没有间隙的范围,gaps 向量返回为integer(0),并且由于某种原因,nogaps 向量也给出了该结果。
我尝试解决这个问题包括使用如下 if 语句:
gaps <- which(align1 == "-", arr.in=TRUE)
gaps <- gaps[,2]
gaps <- gaps[!duplicated(gaps) ]
nogaps <- 1:ncol(align1)
nogaps <- ifelse (length(gaps) == 0, nogaps, nogaps[-gaps])
但这会导致nogaps 等于 1
为什么 if 语句会给出这个结果,我该如何解决?
提前致谢
【问题讨论】: