From 82b7515e51dc86d6415e32bd0c9be4e9715bb18b Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Fri, 13 May 2022 11:17:25 +0200 Subject: [PATCH 1/4] Increment version number to 0.0.0.9007 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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( From fff8574b823a8d2987bc6acf4d7f665c633f82ae Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Fri, 13 May 2022 11:17:59 +0200 Subject: [PATCH 2/4] Translated `lueGenePopDataPop()` (#2) --- R/lueGenePopDataPop.R | 77 +++++++++++++++++++++++++++++ matlab/independent/greedyPopMix.m | 80 ------------------------------- 2 files changed, 77 insertions(+), 80 deletions(-) create mode 100644 R/lueGenePopDataPop.R diff --git a/R/lueGenePopDataPop.R b/R/lueGenePopDataPop.R new file mode 100644 index 0000000..1080f12 --- /dev/null +++ b/R/lueGenePopDataPop.R @@ -0,0 +1,77 @@ +lueGenePopDataPop <- function(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) + } + + 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 <- fgetl(fid) + + 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 (line != -1) { + ninds <- ninds + 1 + data <- addAlleles(data, ninds, line, divider) + } + } + + data <- data[1:ninds * 2, ] + popnames <- popnames[1: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/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 Date: Fri, 13 May 2022 12:39:57 +0200 Subject: [PATCH 3/4] Added function documentation --- NAMESPACE | 1 + R/lueGenePopDataPop.R | 6 ++++++ man/lueGenePopDataPop.Rd | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 man/lueGenePopDataPop.Rd 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 index 1080f12..7b199ed 100644 --- a/R/lueGenePopDataPop.R +++ b/R/lueGenePopDataPop.R @@ -1,3 +1,9 @@ +#' @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. 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. +} From a469240f81597233d034f516afebedb48618fff0 Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Fri, 13 May 2022 12:41:19 +0200 Subject: [PATCH 4/4] Replaced some syntax Replaced translated code with equivalent code from `lueGenePopData()` --- R/lueGenePopDataPop.R | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/R/lueGenePopDataPop.R b/R/lueGenePopDataPop.R index 7b199ed..c8a2b22 100644 --- a/R/lueGenePopDataPop.R +++ b/R/lueGenePopDataPop.R @@ -8,16 +8,16 @@ lueGenePopDataPop <- function(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 + fid <- readLines(tiedostonNimi) + line <- fid[1] # ensimmäinen rivi + line <- fid[2] # toinen rivi count <- rivinSisaltamienMjonojenLkm(line) - line <- fgetl(fid) + line <- fid[3] lokusRiveja <- 1 while (testaaPop(line) == 0) { lokusRiveja <- lokusRiveja + 1 - line <- fgetl(fid) + line <- fid[2 + lokusRiveja] } if (lokusRiveja > 1) { @@ -32,9 +32,9 @@ lueGenePopDataPop <- function(tiedostonNimi) { ninds <- 0 poimiNimi <- 1 digitFormat = -1 - while (line != -1) { - line <- fgetl(fid) - + 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 @@ -47,8 +47,8 @@ lueGenePopDataPop <- function(tiedostonNimi) { digitFormat <- selvitaDigitFormat(line) divider <- 10 ^ digitFormat } - popnames[nimienLkm, 1] = nimi # Näin se on greedyMix:issäkin?!? - popnames[nimienLkm, 2] = ninds + popnames[nimienLkm, 1] <- nimi # Näin se on greedyMix:issäkin?!? + popnames[nimienLkm, 2] <- ninds poimiNimi <- 0 data <- addAlleles(data, ninds, line, divider) @@ -56,14 +56,14 @@ lueGenePopDataPop <- function(tiedostonNimi) { } 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[1:nimienLkm, ] + data <- data[1:(ninds * 2), ] + popnames <- popnames[seq_len(nimienLkm), ] npops <- size(popnames, 1) ind <- 1 for (pop in 1:npops) {