Я прохожу через большую матрицу символов, называемую geno.data
. Я по существу зацикливаю два столбца матрицы за раз. Он работает очень медленно. В конце цикла я планирую экспортировать EIGENSTRAT_genofile
в файл .txt
. Я использую Xa
в остальной части программы. Как я могу сделать это быстрее? БлагодаряКак я могу ускорить мой R-код?
geno.data <- matrix(nrow = 313, ncol = 300000, c("a","c","g")) # large matrix
Num_of_SNPs<-ncol(geno.data) /2
compute_MAF<- function(j){
loci<- NULL
loci<- table(as.vector(geno.data[,c(2*j-1,2*j)]))
total_alleles<- sum(loci)
loci<- loci/total_alleles
# major and minor allele frequencies for one locus
major_allele<- names(which.max(loci))
minor_allele<- names(which.min(loci))
return(cbind(major_allele, minor_allele))
}
Xa <- matrix(NA, nrow = nrow(geno.data), ncol = Num_of_SNPs)
EIGENSTRAT_genofile<-c()
for (j in 1:Num_of_SNPs){
allele<-compute_MAF(j)
X <- 1 * (geno.data[,c(2*j-1, 2*j)] == allele[2]) # minor allele
reference_allele_count <- rowSums(geno.data[,c(2*j-1,2*j)]==allele[1], na.rm=TRUE)
EIGENSTRAT_genofile<- rbind(EIGENSTRAT_genofile,reference_allele_count)
Xa[,j] <- X[,1] + X[,2] - 1
}
Посмотрите на пакет doParallel. если на вашем компьютере имеется несколько ядер, вы можете значительно повысить скорость. – Jason