csys.scale <- function(train, test = NULL, scale.method = c("min-max", "mean-sd", "median-mad"))
{
    method = match.arg(scale.method)
    n = ncol(train) ## number of features

    for (i in 1 : n) { ## for each sample/column
        ## remove all NA & INF data
        y = train[,i]
        val.Idx = is.finite(y)
        x = y[val.Idx]
        if (method == "min-max") {
            dif = min(x)
            div = max(x) - dif
        } else if (method == "mean-sd") {
            dif = mean(x)
            div = sd(x)
        }else if (method == "median-mad") {
            dif = median(x)
            div = mad(x,center = dif)
        }

        train[val.Idx, i] = (x-dif)/div

        if (length(test) != 0) {
            testY = test[,i]
            val.Idx = is.finite(testY)
            test[val.Idx, i] = (testY[val.Idx] - dif)/div
        }
    }

    return(list(train=train,test=test))
}
