我正在尝试加快 QC 功能以检查样本之间的相似性。我想知道是否有更快的方法来比较我在下面的做法?我知道这类问题的答案非常明确(在 SO 或其他方面),但我找不到它们。我知道我应该调查plyr
,但我仍然掌握sapply
.
以下示例数据是我将要工作但随机的代表性输出,我认为不会影响我最初问题的应用程序。
## sample data
nSamples <- 1000
nSamplesQC <- 100
nAssays <- 96
microarrayScores <- matrix(sample(c("G:G", "T:G", "T:T", NA),nSamples * nAssays,replace = TRUE), nrow = nSamples, ncol = nAssays)
microarrayScoresQC <- matrix(sample(c("G:G", "T:G", "T:T", NA),nSamples * nAssays,replace = TRUE), nrow = nSamples, ncol = nAssays)
mycombs <- data.frame(Experiment = rep(1:nSamples,nSamplesQC),QC = sort(rep(1:nSamplesQC,nSamples)))
## testing function
system.time(
sapply(seq(length(mycombs[,1])), function(x) {compare <- microarrayScores[mycombs[x,1],]==microarrayScoresQC[mycombs[x,2],];
sum(compare[!is.na(compare)])/sum(!is.na(compare))})
)