66 lines
No EOL
1.6 KiB
R
66 lines
No EOL
1.6 KiB
R
#' @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) {
|
||
|
||
fid <- load(tiedostonNimi)
|
||
line1 <- readLines(fid)[1] # ensimmäinen rivi
|
||
line2 <- readLines(fid)[2] # toinen rivi
|
||
count <- rivinSisaltamienMjonojenLkm(line)
|
||
|
||
line <- readLines(fid)[3]
|
||
lokusRiveja <- 1
|
||
while (testaaPop(line) == 0) {
|
||
lokusRiveja <- lokusRiveja + 1 # locus row
|
||
line <- readLines(fid)[3 + lokusRiveja]
|
||
}
|
||
|
||
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
|
||
while (line != -1) {
|
||
line <- readLines(fid)[lokusRiveja + 1]
|
||
lokusRiveja <- lokusRiveja + 1
|
||
|
||
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
|
||
}
|
||
popnames[nimienLkm, 1] <- nimi #N<>in se on greedyMix:iss<73>kin?!?
|
||
popnames[nimienLkm, 2] <- ninds
|
||
poimiNimi <- 0
|
||
|
||
data <- addAlleles(data, ninds, line, divider)
|
||
|
||
} else if (testaaPop(line)) {
|
||
poimiNimi <- 1
|
||
|
||
} else if (line != -1) {
|
||
ninds <- ninds + 1
|
||
data <- addAlleles(data, ninds, line, divider)
|
||
}
|
||
}
|
||
|
||
data <- data[1:(ninds * 2),]
|
||
popnames <- popnames[seq_len(nimienLkm),]
|
||
return(list(data = data, popnames = popnames))
|
||
} |