2020-06-24 16:47:39 +02:00
|
|
|
|
#' @title Add Alleles
|
|
|
|
|
|
#' @param data data
|
|
|
|
|
|
#' @param ind ind
|
|
|
|
|
|
#' @param line line
|
|
|
|
|
|
#' @param divider divider
|
|
|
|
|
|
#' @return data (after alleles were added)
|
|
|
|
|
|
#' @export
|
|
|
|
|
|
addAlleles <- function(data, ind, line, divider) {
|
|
|
|
|
|
# Lisaa BAPS-formaatissa olevaan datataulukkoon
|
|
|
|
|
|
# yksil<69><6C> ind vastaavat rivit. Yksil<69>n alleelit
|
|
|
|
|
|
# luetaan genepop-formaatissa olevasta rivist?
|
|
|
|
|
|
# line. Jos data on 3 digit formaatissa on divider=1000.
|
|
|
|
|
|
# Jos data on 2 digit formaatissa on divider=100.
|
|
|
|
|
|
|
2020-07-28 15:35:04 +02:00
|
|
|
|
nloci <- size(data, 2) # added 1 from original code
|
2020-06-24 16:47:39 +02:00
|
|
|
|
if (size(data, 1) < (2 * ind)) {
|
2020-07-28 15:35:04 +02:00
|
|
|
|
data <- rbind(data, zeros(100, nloci)) # subtracted 1 from original code
|
2020-06-24 16:47:39 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
k <- 1
|
2020-07-28 15:35:04 +02:00
|
|
|
|
merkki <- substring(line, k, k)
|
2020-06-24 16:47:39 +02:00
|
|
|
|
while (merkki != ',') {
|
2020-11-09 06:26:53 +01:00
|
|
|
|
k <- k + 1
|
|
|
|
|
|
merkki <- substring(line, k, k)
|
2020-06-24 16:47:39 +02:00
|
|
|
|
}
|
2020-07-28 15:35:04 +02:00
|
|
|
|
line <- substring(line, k + 1)
|
2020-06-24 16:47:39 +02:00
|
|
|
|
# clear k; clear merkki;
|
|
|
|
|
|
|
2020-07-28 15:35:04 +02:00
|
|
|
|
if (grepl(" ", line)) {
|
|
|
|
|
|
alleeliTaulu <- as.numeric(strsplit(line, split = " ")[[1]])
|
|
|
|
|
|
} else if (grepl("\t", line)) {
|
|
|
|
|
|
alleeliTaulu <- as.numeric(strsplit(line, split = "\t")[[1]])
|
|
|
|
|
|
}
|
2020-06-24 16:47:39 +02:00
|
|
|
|
|
|
|
|
|
|
if (length(alleeliTaulu) != nloci) {
|
|
|
|
|
|
stop('Incorrect data format.')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (j in seq_len(nloci)) {
|
|
|
|
|
|
ekaAlleeli <- floor(alleeliTaulu[j] / divider)
|
2020-07-28 15:35:04 +02:00
|
|
|
|
if (is.na(ekaAlleeli) | ekaAlleeli == 0) ekaAlleeli <- -999
|
2020-06-24 16:47:39 +02:00
|
|
|
|
tokaAlleeli <- alleeliTaulu[j] %% divider
|
2020-07-28 15:35:04 +02:00
|
|
|
|
if (is.na(tokaAlleeli) | tokaAlleeli == 0) tokaAlleeli <- -999
|
2020-06-24 16:47:39 +02:00
|
|
|
|
|
|
|
|
|
|
data[2 * ind - 1, j] <- ekaAlleeli
|
|
|
|
|
|
data[2 * ind, j] <- tokaAlleeli
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-06-24 16:49:31 +02:00
|
|
|
|
data[2 * ind - 1, ncol(data)] <- ind
|
|
|
|
|
|
data[2 * ind, ncol(data)] <- ind
|
2020-06-24 16:47:39 +02:00
|
|
|
|
return(data)
|
|
|
|
|
|
}
|