columnWiseEqual <- function(DT1, DT2) {
  if (length(DT1) != length(DT2)) {
    warning("data.tables have different number of columns -- returning FALSE")
    return(FALSE)
  }

  if (!all(names(DT1) == names(DT2))) {
    warning("Column names are different -- returning FALSE")
    return(FALSE)
  }

  ## Confirm that the classes are the same for both DT's
  classes.1 <- lapply(DT1, class)
  classes.2 <- lapply(DT2, class)
  wh.classes_diff <- !mapply(function(x, y) length(x) == length(y) && all(x == y), x=classes.1, y=classes.2)
  if (any(wh.classes_diff)) {
    warning("Classes are different for column(s): \n\t", pasteC(names(DT1)[wh.classes_diff], C="\n\t"))
  }

  equalOrNA(DT1, DT2)
}
