diff --git a/R/addAlleles.R b/R/addAlleles.R index a1c87bd..33d0f38 100644 --- a/R/addAlleles.R +++ b/R/addAlleles.R @@ -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 diff --git a/R/lueGenePopData.R b/R/lueGenePopData.R index 2c79d03..7276537 100644 --- a/R/lueGenePopData.R +++ b/R/lueGenePopData.R @@ -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�kin?!? + popnames[nimienLkm, 1] <- nimi #N�in se on greedyMix:iss�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)) } \ No newline at end of file