
  # -------------------------------------------------------------------------------------------------------------------------  #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  #                                                                                                                            #
  #           File Name              :  AggAndRatio.r                                                                          #
  #           Last Updated Funclist  :  08 Feb 2015,  5:14 AM (Sunday)                                                         #
  #                                                                                                                            #
  #           Author Name            :  Rick Saporta                                                                           #
  #           Author Email           :  RickSaporta@gmail.com                                                                  #
  #           Author URL             :  www.github.com/rsaporta                                                                #
  #                                                                                                                            #
  #           Packages Called        :  NA                                                                                     #
  #           Packages Used via NS   :  NA                                                                                     #
  #                                                                                                                            #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  #                                                                                                                            #
  #   AggAndRatio        ( DT, byCols, ratioCol, valueCol, FUN=sum, allowNegativeValues=FALSE )                                #
  #                                                                                                                            #
  #                                                                                                                            #
  #                                                     <END FUNCS>                                                            #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  # -------------------------------------------------------------------------------------------------------------------------  #

# AggAndRatio.r

AggAndRatio <- function(DT, byCols, ratioCol, valueCol, FUN=sum, allowNegativeValues=FALSE) {
##  Aggregates 

  colsExpected <- c(byCols, ratioCol, valueCol)
  if (length({wh <- setdiff(colsExpected, names(DT)) })) {
    stop(warningCols("The following columns are not available in DT: ", wh, midbreak=0L))
  }

  FUN <- match.fun(FUN)
  copy(DT)[ , as.list(setNames(nm=valueCol, obj=FUN(get(valueCol))))
            , keyby=c(unique(c(byCols, ratioCol)))

          ][ (get(valueCol) < 0) & !allowNegativeValues, c(valueCol) := 0L
          ][, proportions := removeNA(proportion(get(valueCol)), replace=0)
            , by=byCols 

          ][, scaledAlpha := removeNA(alphaScale(get(valueCol)), replace=0)
          ]
}
