From 862a91febcc382ece993ba036042aeeff761639d Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Wed, 24 Jun 2020 15:16:13 +0200 Subject: [PATCH] Added bare-bones lueGenePopData --- NAMESPACE | 1 + R/greedyMix.R | 64 ----------------------------------------- R/lueGenePopData.R | 66 +++++++++++++++++++++++++++++++++++++++++++ man/lueGenePopData.Rd | 17 +++++++++++ 4 files changed, 84 insertions(+), 64 deletions(-) create mode 100644 R/lueGenePopData.R create mode 100644 man/lueGenePopData.Rd diff --git a/NAMESPACE b/NAMESPACE index d478d16..f6edaf8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,6 +13,7 @@ export(inputdlg) export(isfield) export(laskeMuutokset4) export(learn_simple_partition) +export(lueGenePopData) export(noIndex) export(ownNum2Str) export(poistaLiianPienet) diff --git a/R/greedyMix.R b/R/greedyMix.R index 88c9004..ade1cb0 100644 --- a/R/greedyMix.R +++ b/R/greedyMix.R @@ -1580,70 +1580,6 @@ greedyMix <- function( # %------------------------------------------------------ - -# function [data, popnames] = lueGenePopData(tiedostonNimi) - -# 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 - -# data = data(1:ninds*2,:); -# popnames = popnames(1:nimienLkm,:); -# fclose(fid); - -# %-------------------------------------------------------- - - # function data = addAlleles(data, ind, line, divider) # % Lisaa BAPS-formaatissa olevaan datataulukkoon # % yksil�� ind vastaavat rivit. Yksil�n alleelit diff --git a/R/lueGenePopData.R b/R/lueGenePopData.R new file mode 100644 index 0000000..2c79d03 --- /dev/null +++ b/R/lueGenePopData.R @@ -0,0 +1,66 @@ +#' @title Read GenePop Data +#' @description Reads GenePop-formatted data +#' @param tiedostonNimi Name of the file +#' @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 + count <- rivinSisaltamienMjonojenLkm(line) + + line <- readLines(fid)[3] + lokusRiveja <- 1 + while (testaaPop(line) == 0) { + lokusRiveja <- lokusRiveja + 1 # locus row + line <- readLines(fid)[3 + 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 (line != -1) { + line <- readLines(fid)[lokusRiveja + 1] + lokusRiveja <- lokusRiveja + 1 + + 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[seq_len(nimienLkm),] + return(list(data = data, popnames = popnames)) +} \ No newline at end of file diff --git a/man/lueGenePopData.Rd b/man/lueGenePopData.Rd new file mode 100644 index 0000000..02c0612 --- /dev/null +++ b/man/lueGenePopData.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lueGenePopData.R +\name{lueGenePopData} +\alias{lueGenePopData} +\title{Read GenePop Data} +\usage{ +lueGenePopData(tiedostonNimi) +} +\arguments{ +\item{tiedostonNimi}{Name of the file} +} +\value{ +list containing data and popnames +} +\description{ +Reads GenePop-formatted data +}