I am trying to vectorize my nested for loop code using apply/mapply/lapply/sapply or any other way to reduce the running time. My code is as follows:
for (i in 1:dim){
 for (j in i:dim){ 
  if(mydist.fake[i,j] != d.hat.fake[i,j]){
    if((mydist.fake[i,j]/d.hat.fake[i,j] > 1.5)|(d.hat.fake[i,j]/mydist.fake[i,j]>1.5)){
        data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 1)
        colnames(data1) = NULL
        row.names(data1) = NULL
        data = rbind(data, data1)
    }else{
        data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 0)
        colnames(data1) = NULL
        row.names(data1) = NULL
        data = rbind(data, data1)
        }
      }
    }  
  }
write.table(data, file = "fakeTest.txt", sep ="\t", col.names = FALSE, row.names = FALSE)
- rowNames is the vector of rownames of all data points
- datais a dataframe
- mydist.fakeand- d.hat.fakeare distance matrices (where the diagonal is zero and values of upper and lower triangle is same) and therefore, interested in the transversal of lower triangle (leaving values of diagonals too).
- The dimensions of the both the matrices are the same.
The major problem I am facing is the vectorization of the j loop where j is initialized as i.
 
    