Merge branch 'fix-lueGenePopData' into import-genepop
This commit is contained in:
commit
62289d14a2
5 changed files with 45 additions and 42 deletions
|
|
@ -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;
|
||||||
|
|
||||||
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) {
|
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
|
||||||
|
|
|
||||||
6
R/cell.R
6
R/cell.R
|
|
@ -6,10 +6,10 @@
|
||||||
#' @return An array of zeroes with the dimensions passed on call
|
#' @return An array of zeroes with the dimensions passed on call
|
||||||
cell <- function(n, sz = c(n, n), ...) {
|
cell <- function(n, sz = c(n, n), ...) {
|
||||||
if (length(sz) == 1 & missing(...)) {
|
if (length(sz) == 1 & missing(...)) {
|
||||||
return(array(dim = c(n, sz)))
|
return(array(0, dim = c(n, sz)))
|
||||||
} else if (length(sz) == 2) {
|
} else if (length(sz) == 2) {
|
||||||
return(array(dim = sz))
|
return(array(0, dim = sz))
|
||||||
} else {
|
} else {
|
||||||
return(array(dim = c(n, sz, ...)))
|
return(array(0, dim = c(n, sz, ...)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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,38 +28,34 @@ 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) {
|
||||||
digitFormat <- selvitaDigitFormat(line)
|
digitFormat <- selvitaDigitFormat(line)
|
||||||
divider <- 10 ^ digitFormat
|
divider <- 10 ^ digitFormat
|
||||||
}
|
}
|
||||||
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))
|
||||||
}
|
}
|
||||||
14
R/lueNimi.R
14
R/lueNimi.R
|
|
@ -1,17 +1,23 @@
|
||||||
#' @title Read the Name
|
#' @title Read the Name
|
||||||
#' @description Reads the line name
|
#' @description Returns the part of the line from the beginning that is before the comma. Useful for returning the name of a GenePop area
|
||||||
#' @param line line
|
#' @param line line
|
||||||
#' @return nimi
|
#' @return nimi
|
||||||
#' @export
|
#' @export
|
||||||
lueNimi <- function(line) {
|
lueNimi <- function(line) {
|
||||||
|
# ==========================================================================
|
||||||
|
# Validation
|
||||||
|
# ==========================================================================
|
||||||
|
if (!grepl(",", line)) {
|
||||||
|
stop("There are no commas in this line")
|
||||||
|
}
|
||||||
# Palauttaa line:n alusta sen osan, joka on ennen pilkkua.
|
# Palauttaa line:n alusta sen osan, joka on ennen pilkkua.
|
||||||
n <- 1
|
n <- 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
nimi <- ''
|
nimi <- ''
|
||||||
while (merkki != ',') {
|
while (merkki != ',') {
|
||||||
nimi <- c(nimi, merkki)
|
nimi <- c(nimi, merkki)
|
||||||
n <- n + 1
|
n <- n + 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
}
|
}
|
||||||
return(nimi)
|
return(paste(nimi, collapse=""))
|
||||||
}
|
}
|
||||||
|
|
@ -7,23 +7,22 @@ selvitaDigitFormat <- function(line) {
|
||||||
# Genepop-formaatissa olevasta datasta. funktio selvitt<74><74>
|
# Genepop-formaatissa olevasta datasta. funktio selvitt<74><74>
|
||||||
# rivin muodon perusteella, ovatko datan alleelit annettu
|
# rivin muodon perusteella, ovatko datan alleelit annettu
|
||||||
# 2 vai 3 numeron avulla.
|
# 2 vai 3 numeron avulla.
|
||||||
|
|
||||||
n <- 1
|
n <- 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
while (merkki != ',') {
|
while (merkki != ',') {
|
||||||
n <- n + 1
|
n <- n + 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!any(merkki == '0123456789')) {
|
while (!any(merkki %in% as.character(0:9))) {
|
||||||
n <- n + 1
|
n <- n + 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
}
|
}
|
||||||
numeroja <- 0
|
numeroja <- 0
|
||||||
while (any(merkki == '0123456789')) {
|
while (any(merkki %in% as.character(0:9))) {
|
||||||
numeroja <- numeroja + 1
|
numeroja <- numeroja + 1
|
||||||
n <- n + 1
|
n <- n + 1
|
||||||
merkki <- line[n]
|
merkki <- substring(line, n, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
df <- numeroja / 2
|
df <- numeroja / 2
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue