Browse code

fix vector normalisation

Corrected implementation
Added tests

Gavin Rhys Lloyd authored on 25/01/2022 11:37:13
Showing 2 changed files

... ...
@@ -47,9 +47,9 @@ setMethod(f="model_apply",
47 47
         smeta=D$sample_meta
48 48
         x=D$data
49 49
 
50
-        coeff = apply(x,MARGIN = 2,FUN = function(z) sqrt(sum(z, na.rm = TRUE)))
51
-        normalised = apply(x,MARGIN = 2,FUN = function(z) z/sqrt(sum(z, na.rm=TRUE)))
52
-        D$data = as.data.frame(normalised)
50
+        coeff = apply(x,MARGIN = 1,FUN = function(z) sqrt(sum(z*z, na.rm = TRUE)))
51
+        normalised = apply(x,MARGIN = 1,FUN = function(z) z/sqrt(sum(z*z, na.rm=TRUE)))
52
+        D$data = as.data.frame(t(normalised))
53 53
 
54 54
         output_value(M,'normalised') = D
55 55
         output_value(M,'coeff') = data.frame('coeff'=coeff)
... ...
@@ -7,5 +7,8 @@ test_that('vecnorm',{
7 7
   M = vec_norm()
8 8
   # apply
9 9
   M = model_apply(M,D)
10
-  expect_equal(M$normalised$data[1,1],0.172,tolerance=0.001)
10
+  expect_equal(sum(M$normalised$data[1,]^2),1,tolerance=0.00001)
11
+  expect_equal(sum(M$normalised$data[5,]^2),1,tolerance=0.00001)
12
+  expect_equal(sum(M$normalised$data[25,]^2),1,tolerance=0.00001)
13
+  expect_equal(predicted(M)$data[1,1],0.8037,tolerance=0.0001)
11 14
 })