diff --git a/DESCRIPTION b/DESCRIPTION index 4ce1fa8..554d25c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: rBAPS Title: Bayesian Analysis of Population Structure -Version: 0.0.0.9006 +Version: 0.0.0.9007 Date: 2020-11-09 Authors@R: c( diff --git a/NAMESPACE b/NAMESPACE index 8b6dded..887ac8a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,6 +21,7 @@ export(linkage) export(load_fasta) export(logml2String) export(lueGenePopData) +export(lueGenePopDataPop) export(lueNimi) export(noIndex) export(ownNum2Str) diff --git a/R/lueGenePopDataPop.R b/R/lueGenePopDataPop.R new file mode 100644 index 0000000..c8a2b22 --- /dev/null +++ b/R/lueGenePopDataPop.R @@ -0,0 +1,83 @@ +#' @title Read GenePop Data +#' @note The data is given in the form where the last column tells the +#' group. popnames are as before. +#' @param tiedostonNimi Name of the file +#' @return List containing data and popnames +#' @export +lueGenePopDataPop <- function(tiedostonNimi) { + # Data annetaan muodossa, jossa viimeinen sarake kertoo ryhmän. + # popnames on kuten ennenkin. + + fid <- readLines(tiedostonNimi) + line <- fid[1] # ensimmäinen rivi + line <- fid[2] # toinen rivi + count <- rivinSisaltamienMjonojenLkm(line) + + line <- fid[3] + lokusRiveja <- 1 + while (testaaPop(line) == 0) { + lokusRiveja <- lokusRiveja + 1 + line <- fid[2 + 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 (lokusRiveja < length(fid) - 2) { + lokusRiveja <- lokusRiveja + 1 # Keeps the loop moving along + line <- fid[lokusRiveja + 2] + 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äkin?!? + popnames[nimienLkm, 2] <- ninds + poimiNimi <- 0 + + data <- addAlleles(data, ninds, line, divider) + + } else if (testaaPop(line)) { + poimiNimi <- 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), ] + npops <- size(popnames, 1) + ind <- 1 + for (pop in 1:npops) { + if (pop < npops) { + while (ind < popnames[pop + 1, 2]) { + data[c(ind * 2 - 1, ind * 2), ncol(data)] <- pop + ind <- ind + 1 + } + } else { + while (ind <= ninds) { + data[c(ind * 2 - 1, ind * 2), ncol(data)] <- pop + ind <- ind + 1 + } + } + } + return(list(data = data, popnames = popnames)) +} diff --git a/man/lueGenePopDataPop.Rd b/man/lueGenePopDataPop.Rd new file mode 100644 index 0000000..0f55482 --- /dev/null +++ b/man/lueGenePopDataPop.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lueGenePopDataPop.R +\name{lueGenePopDataPop} +\alias{lueGenePopDataPop} +\title{Read GenePop Data} +\usage{ +lueGenePopDataPop(tiedostonNimi) +} +\arguments{ +\item{tiedostonNimi}{Name of the file} +} +\value{ +List containing data and popnames +} +\description{ +Read GenePop Data +} +\note{ +The data is given in the form where the last column tells the +group. popnames are as before. +} diff --git a/matlab/independent/greedyPopMix.m b/matlab/independent/greedyPopMix.m index 17d63ae..4c4811f 100644 --- a/matlab/independent/greedyPopMix.m +++ b/matlab/independent/greedyPopMix.m @@ -251,86 +251,6 @@ else end end -%-------------------------------------------------------------------- - - -function [data, popnames] = lueGenePopDataPop(tiedostonNimi) -% Data annetaan muodossa, jossa viimeinen sarake kertoo ryhmän. -% popnames on kuten ennenkin. - -fid = fopen(tiedostonNimi); -line = fgetl(fid); %ensimmäinen rivi -line = fgetl(fid); %toinen rivi -count = rivinSisaltamienMjonojenLkm(line); - -line = fgetl(fid); -lokusRiveja = 1; -while (testaaPop(line)==0) - lokusRiveja = lokusRiveja+1; - line = fgetl(fid); -end - -if lokusRiveja>1 - nloci = lokusRiveja; -else - nloci = count; -end - -popnames = cell(10,2); -data = zeros(100, nloci+1); -nimienLkm=0; -ninds=0; -poimiNimi=1; -digitFormat = -1; -while line ~= -1 - line = fgetl(fid); - - if poimiNimi==1 - %Edellinen rivi oli 'pop' - nimienLkm = nimienLkm+1; - ninds = ninds+1; - if nimienLkm>size(popnames,1); - popnames = [popnames; cell(10,2)]; - end - nimi = lueNimi(line); - if digitFormat == -1 - digitFormat = selvitaDigitFormat(line); - divider = 10^digitFormat; - end - popnames{nimienLkm, 1} = {nimi}; %Näin se on greedyMix:issäkin?!? - popnames{nimienLkm, 2} = ninds; - poimiNimi=0; - - data = addAlleles(data, ninds, line, divider); - - elseif testaaPop(line) - poimiNimi = 1; - - elseif line ~= -1 - ninds = ninds+1; - data = addAlleles(data, ninds, line, divider); - end -end - -fclose(fid); -data = data(1:ninds*2,:); -popnames = popnames(1:nimienLkm,:); -npops = size(popnames,1); -ind = 1; -for pop = 1:npops - if pop