R/vec_norm_class.R
883f7f27
 #' vector nromalisation
 #'
 #' applies vector normalisation
 #' @export vec_norm
 #' @import pmp
 vec_norm<-setClass(
   "vec_norm",
   contains = c('method'),
   slots=c(outputs.normalised='entity',
           outputs.coeff='entity'
   ),
   prototype=list(name = 'Vector normalisation',
                  description = 'Normalises each row such that the sum of squares is equal to 1',
                  type = 'normalisation',
                  predicted = 'normalised',
                  outputs=c('normalised','coeff'),
 
                  outputs.normalised=entity(name = 'Normalised dataset',
                                            description = 'A dataset object containing the normalised data.',
                                            type='dataset',
                                            value=dataset()
                  ),
                  outputs.flags=entity(name = 'Normalisation coefficients',
                                       description = 'The normalisation coefficients calculated by PQN',
                                       type='data.frame',
                                       value=data.frame()
                  )
   )
 )
 
 #' @export
 setMethod(f="method.apply",
           signature=c("vec_norm","dataset"),
           definition=function(M,D)
           {
             smeta=dataset.sample_meta(D)
             x=dataset.data(D)
 
             coeff = apply(x,MARGIN = 2,FUN = function(z) sqrt(sum(z, na.rm = TRUE)))
             normalised = apply(x,MARGIN = 2,FUN = function(z) z/sqrt(sum(z, na.rm=TRUE)))
             dataset.data(D) = as.data.frame(normalised)
 
             output.value(M,'normalised') = D
             output.value(M,'coeff') = data.frame('coeff'=coeff)
 
             return(M)
           }
 )