grouping=list(c(1,2,3),c(4,5),c(6,7)) set.seed(451) data=t(gtools::rdirichlet(10, c(1,1,1,4,4,9,9))) inicenters=runif(dim(data)[2]*length(grouping), 0.1, 0.9) inicenters_v=as.vector(inicenters) distance=RelativeDistance inicenters_m=t(matrix(inicenters_v,dim(data)[2],length(grouping))) f=sum(c(RelativeDistance(data[1,], inicenters_m[1,]), RelativeDistance(data[2,], inicenters_m[1,]), RelativeDistance(data[3,], inicenters_m[1,]), RelativeDistance(data[4,], inicenters_m[2,]), RelativeDistance(data[5,], inicenters_m[2,]), RelativeDistance(data[6,], inicenters_m[3,]), RelativeDistance(data[7,], inicenters_m[3,]))) grouping2=list(1,c(2,3),c(4,5),6,7) inicenters_v2=runif(dim(data)[2]*2, 0.1, 0.9) inicenters_m2=t(matrix(inicenters_v2,dim(data)[2],2)) f2=sum(c(RelativeDistance(data[2,], inicenters_m2[1,]), RelativeDistance(data[3,], inicenters_m2[1,]), RelativeDistance(data[4,], inicenters_m2[2,]), RelativeDistance(data[5,], inicenters_m2[2,]))) test_that("to_minimize", { expect_equal(to_minimize(inicenters_v, data, grouping, distance), f,tolerance=1e-6) expect_equal(to_minimize(inicenters_v2, data, grouping2, distance), f2,tolerance=1e-6) })