From c72d2b6896c05dd9f8b55dad0252060ee15cf76f Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Tue, 14 Jan 2020 13:06:36 +0100 Subject: [PATCH 1/2] Translated function into R --- R/admix1.R | 20 +------------------- R/etsiParas.R | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 19 deletions(-) create mode 100644 R/etsiParas.R diff --git a/R/admix1.R b/R/admix1.R index a7e9b9b..2d5c52e 100644 --- a/R/admix1.R +++ b/R/admix1.R @@ -536,22 +536,4 @@ admix1 <- function(tietue) { # i2 = ceil(indeksi / npops); # osuusTaulu(i1) = osuusTaulu(i1)-osuus; -# osuusTaulu(i2) = osuusTaulu(i2)+osuus; - - -# %------------------------------------------------------------------------- - - -# function [osuusTaulu, logml] = etsiParas(osuus, osuusTaulu, omaFreqs, logml) - -# ready = 0; -# while ready ~= 1 -# muutokset = laskeMuutokset4(osuus, osuusTaulu, omaFreqs, logml); -# [maxMuutos, indeksi] = max(muutokset(1:end)); -# if maxMuutos>0 -# osuusTaulu = suoritaMuutos(osuusTaulu, osuus, indeksi); -# logml = logml + maxMuutos; -# else -# ready = 1; -# end -# end \ No newline at end of file +# osuusTaulu(i2) = osuusTaulu(i2)+osuus; \ No newline at end of file diff --git a/R/etsiParas.R b/R/etsiParas.R new file mode 100644 index 0000000..22eda5e --- /dev/null +++ b/R/etsiParas.R @@ -0,0 +1,14 @@ +etsiParas <- function = (osuus, osuusTaulu, omaFreqs, logml) { + ready <- 0; + while (ready != 1) { + muutokset <- laskeMuutokset4(osuus, osuusTaulu, omaFreqs, logml) + [maxMuutos, indeksi] = max(muutokset[1:end]) # TODO: how does this work on Matlab? + if (maxMuutos > 0) { + osuusTaulu <- suoritaMuutos(osuusTaulu, osuus, indeksi) + logml <- logml + maxMuutos + } else { + ready <- 1 + } + } + return (c(osuusTaulu, logml)) +} \ No newline at end of file From 9e434c25e53a469f7f7fa2493aa95e2cac3ef043 Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Tue, 14 Jan 2020 13:50:37 +0100 Subject: [PATCH 2/2] Translated function, added tests --- NAMESPACE | 1 + R/admix1.R | 18 +----------------- R/suoritaMuutos.R | 19 +++++++++++++++++++ man/suoritaMuutos.Rd | 20 ++++++++++++++++++++ tests/testthat/test-admix1.R | 14 ++++++++++++++ 5 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 R/suoritaMuutos.R create mode 100644 man/suoritaMuutos.Rd diff --git a/NAMESPACE b/NAMESPACE index 82c7796..e97e44b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,4 +9,5 @@ export(ownNum2Str) export(proportion2str) export(randdir) export(repmat) +export(suoritaMuutos) importFrom(stats,runif) diff --git a/R/admix1.R b/R/admix1.R index 2d5c52e..86d2a13 100644 --- a/R/admix1.R +++ b/R/admix1.R @@ -520,20 +520,4 @@ admix1 <- function(tietue) { # end # pointer = pointer+1; # end -# end - -# %-------------------------------------------------------------------------- - - -# function osuusTaulu = suoritaMuutos(osuusTaulu, osuus, indeksi) -# % Päivittää osuusTaulun muutoksen jälkeen. - -# global COUNTS; -# npops = size(COUNTS,3); - -# i1 = rem(indeksi,npops); -# if i1==0, i1 = npops; end; -# i2 = ceil(indeksi / npops); - -# osuusTaulu(i1) = osuusTaulu(i1)-osuus; -# osuusTaulu(i2) = osuusTaulu(i2)+osuus; \ No newline at end of file +# end \ No newline at end of file diff --git a/R/suoritaMuutos.R b/R/suoritaMuutos.R new file mode 100644 index 0000000..daa48f9 --- /dev/null +++ b/R/suoritaMuutos.R @@ -0,0 +1,19 @@ +#' @title suoritaMuutos +#' @description Päivittää osuusTaulun muutoksen jälkeen. +#' @param osuusTaulu Percentage table? +#' @param osuus percentage? +#' @param indeksi index +#' @param COUNTS counts +#' @export +suoritaMuutos <- function (osuusTaulu, osuus, indeksi, COUNTS = matrix(0)) { + npops <- ifelse(is.na(dim(COUNTS)[3]), 1, dim(COUNTS)[3]) + + i1 <- indeksi %% npops + if (is.na(i1) | i1 == 0) i1 <- npops + i2 <- ceiling(indeksi / npops) + + osuusTaulu[i1] <- osuusTaulu[i1] - osuus + osuusTaulu[i2] <- osuusTaulu[i2] + osuus + + return (osuusTaulu) +} \ No newline at end of file diff --git a/man/suoritaMuutos.Rd b/man/suoritaMuutos.Rd new file mode 100644 index 0000000..fb58a04 --- /dev/null +++ b/man/suoritaMuutos.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/suoritaMuutos.R +\name{suoritaMuutos} +\alias{suoritaMuutos} +\title{suoritaMuutos} +\usage{ +suoritaMuutos(osuusTaulu, osuus, indeksi, COUNTS = matrix(0)) +} +\arguments{ +\item{osuusTaulu}{Percentage table?} + +\item{osuus}{percentage?} + +\item{indeksi}{index} + +\item{COUNTS}{counts} +} +\description{ +Päivittää osuusTaulun muutoksen jälkeen. +} diff --git a/tests/testthat/test-admix1.R b/tests/testthat/test-admix1.R index 2d4962e..1c427eb 100644 --- a/tests/testthat/test-admix1.R +++ b/tests/testthat/test-admix1.R @@ -117,4 +117,18 @@ test_that("computeIndLogml works like on Matlab", { expect_equivalent(computeIndLogml(-pi, -8), 3.2242, tol = .0001) expect_equivalent(computeIndLogml(2:3, 2), 2.3026, tol = .0001) expect_equivalent(computeIndLogml(matrix(8:5, 2), 100), 14.316, tol = .001) +}) + +test_that("suoritaMuutos works like on Matlab", { + mx1 <- c(10, 5, 8) + mx2 <- matrix(c(10, 9, 5, 8, 8, -7), 2) + expect_equal(suoritaMuutos(10, 3, 1), 10) + expect_equal(suoritaMuutos(mx1, 3, 1), c(10, 5, 8)) + expect_equal(suoritaMuutos(mx1, 3, 2), c(7, 8, 8)) + expect_equal(suoritaMuutos(mx1, 3, 3), c(7, 5, 11)) + expect_equal(suoritaMuutos(mx1, 2, 3), c(8, 5, 10)) + expect_equal(suoritaMuutos(mx1, -7, 3), c(17, 5, 1)) + expect_equal(suoritaMuutos(mx2, 0, 5), mx2) + expect_equal(suoritaMuutos(mx2, 0, 5), mx2) + expect_equal(suoritaMuutos(mx2, -3, 6), matrix(c(13, 9, 5, 8, 8, -10), 2)) }) \ No newline at end of file