ourMELONS/R/lueGenePopData.R

61 lines
1.6 KiB
R
Raw Normal View History

2020-06-24 15:16:13 +02:00
#' @title Read GenePop Data
#' @description Reads GenePop-formatted data
#' @param tiedostonNimi Name of the file
#' @return list containing data and popnames
#' @export
lueGenePopData <- function (tiedostonNimi) {
2020-07-28 15:35:04 +02:00
fid <- readLines(tiedostonNimi)
line <- fid[1] # ensimmäinen rivi
line <- fid[2] # toinen rivi
2020-06-24 15:16:13 +02:00
count <- rivinSisaltamienMjonojenLkm(line)
2020-07-28 15:35:04 +02:00
line <- fid[3]
2020-06-24 15:16:13 +02:00
lokusRiveja <- 1
while (testaaPop(line) == 0) {
lokusRiveja <- lokusRiveja + 1 # locus row
2020-07-28 15:35:04 +02:00
line <- fid[2 + lokusRiveja]
2020-06-24 15:16:13 +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
digitFormat <- -1
2020-07-28 15:35:04 +02:00
while (lokusRiveja < length(fid) - 2) {
lokusRiveja <- lokusRiveja + 1 # Keeps the loop moving along
line <- fid[lokusRiveja + 2]
2020-06-24 15:16:13 +02:00
if (poimiNimi == 1) {
2020-07-28 15:35:04 +02:00
# Edellinen rivi oli 'pop' (previous line was pop)
2020-06-24 15:16:13 +02:00
nimienLkm <- nimienLkm + 1
ninds <- ninds + 1
if (nimienLkm > size(popnames, 1)) {
2020-07-28 15:35:04 +02:00
popnames <- rbind(popnames, cell(10, 2))
2020-06-24 15:16:13 +02:00
}
nimi <- lueNimi(line)
if (digitFormat == -1) {
digitFormat <- selvitaDigitFormat(line)
divider <- 10 ^ digitFormat
}
2020-07-28 15:35:04 +02:00
popnames[nimienLkm, 1] <- nimi #N<>in se on greedyMix:iss<73>kin?!?
2020-06-24 15:16:13 +02:00
popnames[nimienLkm, 2] <- ninds
poimiNimi <- 0
data <- addAlleles(data, ninds, line, divider)
} else if (testaaPop(line)) {
poimiNimi <- 1
2020-07-28 15:35:04 +02:00
} else if (!is.na(line)) {
2020-06-24 15:16:13 +02:00
ninds <- ninds + 1
data <- addAlleles(data, ninds, line, divider)
}
}
2020-07-28 15:35:04 +02:00
data <- data[1:(ninds * 2), ]
popnames <- popnames[seq_len(nimienLkm), ]
2020-06-24 15:16:13 +02:00
return(list(data = data, popnames = popnames))
}