Fixed addAlleles and lueGenePopData

This commit is contained in:
Waldir Leoncio 2020-07-28 15:35:04 +02:00
parent 2c3d40c9a7
commit 88fc203c3d
2 changed files with 26 additions and 28 deletions

View file

@ -12,22 +12,25 @@ addAlleles <- function(data, ind, line, divider) {
# line. Jos data on 3 digit formaatissa on divider=1000.
# Jos data on 2 digit formaatissa on divider=100.
nloci <- size(data, 2) - 1
nloci <- size(data, 2) # added 1 from original code
if (size(data, 1) < (2 * ind)) {
data <- c(data, zeros(100, nloci + 1))
data <- rbind(data, zeros(100, nloci)) # subtracted 1 from original code
}
k <- 1
merkki <- line[k]
merkki <- substring(line, k, k)
while (merkki != ',') {
k <- k + 1
merkki <- line[k]
merkki <- substring(line, k, k)
}
line <- line[k + 1:length(line)]
line <- substring(line, k + 1)
# clear k; clear merkki;
alleeliTaulu <- as.numeric(strsplit(line, split = " ")[[1]])
if (grepl(" ", line)) {
alleeliTaulu <- as.numeric(strsplit(line, split = " ")[[1]])
} else if (grepl("\t", line)) {
alleeliTaulu <- as.numeric(strsplit(line, split = "\t")[[1]])
}
if (length(alleeliTaulu) != nloci) {
stop('Incorrect data format.')
@ -35,9 +38,9 @@ addAlleles <- function(data, ind, line, divider) {
for (j in seq_len(nloci)) {
ekaAlleeli <- floor(alleeliTaulu[j] / divider)
if (ekaAlleeli == 0) ekaAlleeli <- -999
if (is.na(ekaAlleeli) | ekaAlleeli == 0) ekaAlleeli <- -999
tokaAlleeli <- alleeliTaulu[j] %% divider
if (tokaAlleeli == 0) tokaAlleeli <- -999
if (is.na(tokaAlleeli) | tokaAlleeli == 0) tokaAlleeli <- -999
data[2 * ind - 1, j] <- ekaAlleeli
data[2 * ind, j] <- tokaAlleeli

View file

@ -4,17 +4,16 @@
#' @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
fid <- readLines(tiedostonNimi)
line <- fid[1] # ensimmäinen rivi
line <- fid[2] # toinen rivi
count <- rivinSisaltamienMjonojenLkm(line)
line <- readLines(fid)[3]
line <- fid[3]
lokusRiveja <- 1
while (testaaPop(line) == 0) {
lokusRiveja <- lokusRiveja + 1 # locus row
line <- readLines(fid)[3 + lokusRiveja]
line <- fid[2 + lokusRiveja]
}
if (lokusRiveja > 1) {
@ -29,38 +28,34 @@ lueGenePopData <- function (tiedostonNimi) {
ninds <- 0
poimiNimi <- 1
digitFormat <- -1
while (line != -1) {
line <- readLines(fid)[lokusRiveja + 1]
lokusRiveja <- lokusRiveja + 1
while (lokusRiveja < length(fid) - 2) {
lokusRiveja <- lokusRiveja + 1 # Keeps the loop moving along
line <- fid[lokusRiveja + 2]
if (poimiNimi == 1) {
# Edellinen rivi oli 'pop'
# Edellinen rivi oli 'pop' (previous line was pop)
nimienLkm <- nimienLkm + 1
ninds <- ninds + 1
if (nimienLkm > size(popnames, 1)) {
popnames <- c(popnames, cell(10, 2))
popnames <- rbind(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, 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) {
} else if (!is.na(line)) {
ninds <- ninds + 1
data <- addAlleles(data, ninds, line, divider)
}
}
data <- data[1:(ninds * 2),]
popnames <- popnames[seq_len(nimienLkm),]
data <- data[1:(ninds * 2), ]
popnames <- popnames[seq_len(nimienLkm), ]
return(list(data = data, popnames = popnames))
}