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. # line. Jos data on 3 digit formaatissa on divider=1000.
# Jos data on 2 digit formaatissa on divider=100. # 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)) { 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 k <- 1
merkki <- line[k] merkki <- substring(line, k, k)
while (merkki != ',') { while (merkki != ',') {
k <- k + 1 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; # clear k; clear merkki;
if (grepl(" ", line)) {
alleeliTaulu <- as.numeric(strsplit(line, split = " ")[[1]]) alleeliTaulu <- as.numeric(strsplit(line, split = " ")[[1]])
} else if (grepl("\t", line)) {
alleeliTaulu <- as.numeric(strsplit(line, split = "\t")[[1]])
}
if (length(alleeliTaulu) != nloci) { if (length(alleeliTaulu) != nloci) {
stop('Incorrect data format.') stop('Incorrect data format.')
@ -35,9 +38,9 @@ addAlleles <- function(data, ind, line, divider) {
for (j in seq_len(nloci)) { for (j in seq_len(nloci)) {
ekaAlleeli <- floor(alleeliTaulu[j] / divider) ekaAlleeli <- floor(alleeliTaulu[j] / divider)
if (ekaAlleeli == 0) ekaAlleeli <- -999 if (is.na(ekaAlleeli) | ekaAlleeli == 0) ekaAlleeli <- -999
tokaAlleeli <- alleeliTaulu[j] %% divider 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 - 1, j] <- ekaAlleeli
data[2 * ind, j] <- tokaAlleeli data[2 * ind, j] <- tokaAlleeli

View file

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