Вот что я могу предложить, основываясь на информации, которой вы поделились.Я добавил свои мысли в виде комментариев в коде -
# convert all rows to numeric matrix instead of as.numeric(SNP[i,c(4:50)]) in every loop
# also subsetting matrix directly gives you a vector which is what is needed for cor.test()
y <- as.matrix(SNP[, c(4:50)])
# initialize pvals with NA and then replace each value in every loop run
pvals <- rep(NA_real_, nrow(SNP))
for(i in 1:nrow(SNP)) {
fit <- cor.test(vector, y[i, ], method = 'spearman', exact = FALSE)
pvals[i] <- fit$p.value
}
# you can assign all names in one go instead of doing it in the loop
names(pvals) <- paste(SNP$V1, SNP$V2)
Наконец, у вас есть классический вариант использования для параллельной обработки.Используя пакеты параллельной обработки, такие как foreach
, вы можете запускать несколько тестов параллельно и затем объединять их в свой вектор результатов pval
.
Также предлагаем вам прочитать книгу 'The R Inferno' для получения дополнительной информации о том, как повысить эффективность кода.