Translated newGetDistances()
This commit is contained in:
parent
7a7945f6bb
commit
e885081f1d
1 changed files with 63 additions and 0 deletions
63
R/newGetDistances.R
Normal file
63
R/newGetDistances.R
Normal file
|
|
@ -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))
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue