From e885081f1d3d4638ef90c0fa83db1106cc0cc3bc Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Tue, 14 Jul 2020 14:35:33 +0200 Subject: [PATCH] Translated newGetDistances() --- R/newGetDistances.R | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 R/newGetDistances.R diff --git a/R/newGetDistances.R b/R/newGetDistances.R new file mode 100644 index 0000000..18cd9c7 --- /dev/null +++ b/R/newGetDistances.R @@ -0,0 +1,63 @@ +newGetDistances <- function(data, rowsFromInd) { + ninds <- max(data[, end]) + nloci <- size(data, 2) - 1 + riviLkm <- choose(ninds, 2) + + empties <- find(data < 0) + data[empties] <- 0 + data <- as.integer(data) # max(noalle) oltava <256 + + pariTaulu <- zeros(riviLkm, 2) + aPointer <- 1 + for (a in (1:ninds) - 1) { + pariTaulu[aPointer:(aPointer + ninds - 1 - a), 1] <- + ones(ninds - a, 1) * a + pariTaulu[aPointer:aPointer + ninds - 1 - a, 2] <- t(a + 1:ninds) + aPointer <- aPointer + ninds - a + } + + eka <- pariTaulu[, ones(1, rowsFromInd)] + eka <- eka * rowsFromInd + miinus <- repmat((rowsFromInd - 1):0, c(riviLkm, 1)) + eka <- eka - miinus + + toka <- pariTaulu[, ones(1, rowsFromInd) * 2] + toka <- toka * rowsFromInd + toka <- toka - miinus + + summa <- zeros(riviLkm, 1) + vertailuja <- zeros(riviLkm, 1) + + rm(pariTaulu, miinus) + + x <- zeros(size(eka)) + x <- as.integer(x) + y <- zeros(size(toka)) + y <- as.integer(y) + + for (j in 1:nloci) { + for (k in 1:rowsFromInd) { + x[, k] <- data[eka[, k], j] + y[, k] <- data[toka[, k], j] + } + for (a in 1:rowsFromInd) { + for (b in 1:rowsFromInd) { + vertailutNyt <- as.double(x[, a] > 0 & y[, b] > 0) + vertailuja <- vertailuja + vertailutNyt + lisays <- (x[, a] != y[, b] & vertailutNyt) + summa <- summa + as.double(lisays) + } + } + } + + rm(x, y, vertailutNyt) + nollat <- find(vertailuja == 0) + dist <- zeros(length(vertailuja), 1) + dist[nollat] <- 1 + muut <- find(vertailuja > 0) + dist[muut] <- summa[muut] / vertailuja[muut] + rm(summa, vertailuja) + + Z = linkage(t(dist)) + return(list(Z = Z, dist = dist)) +} \ No newline at end of file