2022-05-13 12:39:57 +02:00
|
|
|
#' @title Read GenePop Data
|
|
|
|
|
#' @note The data is given in the form where the last column tells the
|
|
|
|
|
#' group. popnames are as before.
|
|
|
|
|
#' @param tiedostonNimi Name of the file
|
|
|
|
|
#' @return List containing data and popnames
|
|
|
|
|
#' @export
|
2022-05-13 11:17:59 +02:00
|
|
|
lueGenePopDataPop <- function(tiedostonNimi) {
|
|
|
|
|
# Data annetaan muodossa, jossa viimeinen sarake kertoo ryhmän.
|
|
|
|
|
# popnames on kuten ennenkin.
|
|
|
|
|
|
2022-05-13 12:41:19 +02:00
|
|
|
fid <- readLines(tiedostonNimi)
|
|
|
|
|
line <- fid[1] # ensimmäinen rivi
|
|
|
|
|
line <- fid[2] # toinen rivi
|
2022-05-13 11:17:59 +02:00
|
|
|
count <- rivinSisaltamienMjonojenLkm(line)
|
|
|
|
|
|
2022-05-13 12:41:19 +02:00
|
|
|
line <- fid[3]
|
2022-05-13 11:17:59 +02:00
|
|
|
lokusRiveja <- 1
|
|
|
|
|
while (testaaPop(line) == 0) {
|
|
|
|
|
lokusRiveja <- lokusRiveja + 1
|
2022-05-13 12:41:19 +02:00
|
|
|
line <- fid[2 + lokusRiveja]
|
2022-05-13 11:17:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (lokusRiveja > 1) {
|
|
|
|
|
nloci <- lokusRiveja
|
|
|
|
|
} else {
|
|
|
|
|
nloci <- count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
popnames <- cell(10, 2)
|
|
|
|
|
data <- zeros(100, nloci + 1)
|
|
|
|
|
nimienLkm <- 0
|
|
|
|
|
ninds <- 0
|
|
|
|
|
poimiNimi <- 1
|
2022-07-28 15:47:36 +02:00
|
|
|
digitFormat <- -1
|
2022-05-13 12:41:19 +02:00
|
|
|
while (lokusRiveja < length(fid) - 2) {
|
|
|
|
|
lokusRiveja <- lokusRiveja + 1 # Keeps the loop moving along
|
|
|
|
|
line <- fid[lokusRiveja + 2]
|
2022-05-13 11:17:59 +02:00
|
|
|
if (poimiNimi == 1) {
|
|
|
|
|
# Edellinen rivi oli 'pop'
|
|
|
|
|
nimienLkm <- nimienLkm + 1
|
|
|
|
|
ninds <- ninds + 1
|
|
|
|
|
if (nimienLkm > size(popnames, 1)) {
|
|
|
|
|
popnames <- c(popnames, cell(10, 2))
|
|
|
|
|
}
|
|
|
|
|
nimi <- lueNimi(line)
|
|
|
|
|
if (digitFormat == -1) {
|
|
|
|
|
digitFormat <- selvitaDigitFormat(line)
|
|
|
|
|
divider <- 10 ^ digitFormat
|
|
|
|
|
}
|
2022-05-13 12:41:19 +02:00
|
|
|
popnames[nimienLkm, 1] <- nimi # Näin se on greedyMix:issäkin?!?
|
|
|
|
|
popnames[nimienLkm, 2] <- ninds
|
2022-05-13 11:17:59 +02:00
|
|
|
poimiNimi <- 0
|
|
|
|
|
|
|
|
|
|
data <- addAlleles(data, ninds, line, divider)
|
|
|
|
|
|
|
|
|
|
} else if (testaaPop(line)) {
|
|
|
|
|
poimiNimi <- 1
|
|
|
|
|
|
2022-05-13 12:41:19 +02:00
|
|
|
} else if (!is.na(line)) {
|
2022-05-13 11:17:59 +02:00
|
|
|
ninds <- ninds + 1
|
|
|
|
|
data <- addAlleles(data, ninds, line, divider)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-13 12:41:19 +02:00
|
|
|
data <- data[1:(ninds * 2), ]
|
|
|
|
|
popnames <- popnames[seq_len(nimienLkm), ]
|
2022-05-13 11:17:59 +02:00
|
|
|
npops <- size(popnames, 1)
|
|
|
|
|
ind <- 1
|
|
|
|
|
for (pop in 1:npops) {
|
|
|
|
|
if (pop < npops) {
|
|
|
|
|
while (ind < popnames[pop + 1, 2]) {
|
|
|
|
|
data[c(ind * 2 - 1, ind * 2), ncol(data)] <- pop
|
|
|
|
|
ind <- ind + 1
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
while (ind <= ninds) {
|
|
|
|
|
data[c(ind * 2 - 1, ind * 2), ncol(data)] <- pop
|
|
|
|
|
ind <- ind + 1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return(list(data = data, popnames = popnames))
|
|
|
|
|
}
|