X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=epclust%2Ftests%2Ftestthat%2Ftest-assignMedoids.R;fp=epclust%2Ftests%2Ftestthat%2Ftest-assignMedoids.R;h=0192563d48e431b278c69710ef9e33d33ffc0ddc;hb=40f12a2f66d06fd77183ea02b996f5c66f90761c;hp=0000000000000000000000000000000000000000;hpb=a52836b23adb4bfa6722642ec6426fb7b5f39650;p=epclust.git diff --git a/epclust/tests/testthat/test-assignMedoids.R b/epclust/tests/testthat/test-assignMedoids.R new file mode 100644 index 0000000..0192563 --- /dev/null +++ b/epclust/tests/testthat/test-assignMedoids.R @@ -0,0 +1,37 @@ +context("assignMedoids") + +test_that("assignMedoids behave as expected", +{ + # Generate a gaussian mixture + n = 999 + L = 7 + medoids = cbind( rep(0,L), rep(-5,L), rep(5,L) ) + # short series... + series = t( rbind( MASS::mvrnorm(n/3, medoids[,1], diag(L)), + MASS::mvrnorm(n/3, medoids[,2], diag(L)), + MASS::mvrnorm(n/3, medoids[,3], diag(L)) ) ) + + # With high probability, medoids indices should resemble 1,1,1,...,2,2,2,...,3,3,3,... + mi = epclust:::assignMedoids(medoids, series) + mi_ref = rep(1:3, each=n/3) + expect_lt( mean(mi != mi_ref), 0.01 ) + + # Now with a random matrix, compare with (~trusted) R version + series = matrix(runif(n*L, min=-7, max=7), nrow=L) + mi = epclust:::assignMedoids(medoids, series) + mi_ref = R_assignMedoids(medoids, series) + expect_equal(mi, mi_ref) +}) + +# R-equivalent of , requiring a matrix +# (thus potentially breaking "fit-in-memory" hope) +R_assignMedoids <- function(medoids, series) +{ + nb_series = ncol(series) #series in columns + + mi = rep(NA,nb_series) + for (i in 1:nb_series) + mi[i] <- which.min( colSums( sweep(medoids, 1, series[,i], '-')^2 ) ) + + mi +}