Я пытаюсь векторизовать свой вложенный код цикла, используя apply
/mapply
/lapply
/sapply
или любым другим способом уменьшить время работы. Мой код выглядит следующим образом:Векторизация вложенных для циклов
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 является вектором rownames всех точек данных
data
является dataframemydist.fake
иd.hat.fake
ARE расстояние матрицы (где диагональ равна нулю, а значения верхний и нижний треугольники одинаковы), и поэтому они заинтересованы в трансверсале нижнего треугольника (оставляя значения диагоналей тоже).- Размеры обеих матриц одинаковы.
Основная проблема я столкнулся это векторизации j
цикла, где j
инициализируется как i
.
Добро пожаловать к переполнению стека. [Воспроизводимые примеры] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) - это путь. Что такое 'rowNames' в вашем примере ?. – mnel
Действительно нужны образцы данных для таких вопросов. –