One Hot Encode

I
oneHotEncode <- function(x, fullRank = T){
    if(fullRank){
        return(model.matrix(~ 0 + ., data = x))
    } else {
        charCols <- colnames(x)[sapply(x, is.character)]
        if(length(charCols) > 0){
            for(col in charCols){
                x[[eval(col)]] <- factor(x[[eval(col)]])
            }
        }
        factorCols <- colnames(x)[sapply(x, is.factor)]
        contrastsList <- vector(mode = "list", length = length(factorCols))
        names(contrastsList) <- factorCols
        if(length(factorCols) > 0){
            for(col in factorCols){
                contrastsList[[eval(col)]] <- contrasts(x[[eval(col)]], contrasts = F)
            }
            return(model.matrix(~ 0 + ., data = x, contrasts = contrastsList))
        } else {
            return(model.matrix(~ 0 + ., data = x))
        }
    }
}

diamonds <- ggplot2::diamonds
head(oneHotEncode(diamonds))
head(oneHotEncode(diamonds, fullRank = F))