У меня есть следующий код (вложенный в цикл) в R, который очень медленный. Цикл соответствует значениям из двух столбцов. Затем подбирает соответствующий файл и выполняет итерацию через файл, чтобы найти совпадение. Затем он берет эту строку из файла. Итерации могут увеличиться до более чем 100 000. Пожалуйста, если кто-то может дать представление о том, как ускорить процесс.Выполнение вложенного цикла выполняется быстрее в R
for(i in 1: length(Jaspar_ids_in_Network)) {
m <- Jaspar_ids_in_Network[i]
gene_ids <- as.character(GeneTFS$GeneIds[i])
gene_names <- as.character(GeneTFS$Genes[i])
print("i")
print(i)
for(j in 1: length(Jaspar_ids_in_Exp)) {
l <- Jaspar_ids_in_Exp[j]
print("j")
print(j)
if (m == l) {
check <- as.matrix(read.csv(file=paste0(dirpath,listoffiles[j]),sep=",",header=FALSE))
data_check <- data.frame(check)
for(k in 1: nrow(data_check)) {
gene_ids_JF <- as.character(data_check[k,3])
genenames_JF <- as.character(data_check[k,4])
if(gene_ids_JF == gene_ids) {
GeneTFS$Source[i] <- as.character(data_check[k,3])
data1 <- rbind(data1, cbind(as.character(data_check[k,3]),
as.character(data_check[k,8]),
as.character(data_check[k,9]),
as.character(data_check[k,6]),
as.character(data_check[k,7]),
as.character(data_check[k,5])))
} else if (toupper(genenames_JF) == toupper(gene_names)) {
GeneTFS$Source[i] <- as.character(data_check[k,4])
data1 <- rbind(data1, cbind(as.character(data_check[k,4]),
as.character(data_check[k,5]),
as.character(data_check[k,6]),
as.character(data_check[k,7]),
as.character(data_check[k,8]),
as.character(data_check[k,2])))
} else {
# GeneTFS[i,4] <- "No Evidence"
}
}
} else {
# GeneTFS[i,4] <- "Record Not Found"
}
}
}
Прежде всего, читать во всех файлах и поместить их в список (и, возможно, 'rbind' их в один большой data.frame). Тогда вы, вероятно, можете использовать 'merge' или использовать пакет data.table и его объединения. Суть в том, что вы не должны использовать любые циклы 'for'. Но если вы это сделаете, вы определенно не должны расти в нем. Больше не могу сказать, так как ваш пример не является [воспроизводимым] (http://stackoverflow.com/a/5963610/1412059). – Roland
Комментарий моего профессора о R: Никогда не используйте петли! –
Можете ли вы предложить, как их заменить. У меня мало знаний в R – user2498657