R/validate_data.R

Defines functions validate_data

Documented in validate_data

#' Validate Tiered Assessment Data
#'
#' Checks whether a data frame is suitable for tiered
#' binary response conversion.
#'
#' @param data A data frame containing binary tier responses.
#' @param n_tier Number of tiers in each item.
#'
#' @return Invisibly returns TRUE if the data are valid.
#'
#' @examples
#' data <- data.frame(
#'   Jwb_1 = c(1, 1, 0),
#'   Als_1 = c(1, 0, 0),
#'   Jwb_2 = c(0, 1, 1),
#'   Als_2 = c(1, 0, 1)
#' )
#'
#' validate_data(data, n_tier = 2)
#'
#' @export
validate_data <- function(data, n_tier) {

  # 1. Check data type
  if (!is.data.frame(data)) {
    stop("data harus berupa data.frame.")
  }

  # 2. Check empty data
  if (nrow(data) == 0) {
    stop("Data tidak boleh kosong.")
  }

  if (ncol(data) == 0) {
    stop("Data harus memiliki minimal satu kolom.")
  }

  # 3. Check n_tier
  if (
    length(n_tier) != 1 ||
    !is.numeric(n_tier) ||
    is.na(n_tier) ||
    n_tier < 1 ||
    n_tier != as.integer(n_tier)
  ) {
    stop(
      "n_tier harus berupa satu bilangan bulat positif."
    )
  }

  # 4. Check number of columns
  if (ncol(data) %% n_tier != 0) {
    stop(
      "Jumlah kolom (",
      ncol(data),
      ") tidak habis dibagi jumlah tier (",
      n_tier,
      ")."
    )
  }

  # 5. Check missing values
  if (anyNA(data)) {
    stop(
      "Data mengandung NA. ",
      "Periksa dan lengkapi data sebelum konversi."
    )
  }

  # 6. Check binary values
  values <- unlist(data, use.names = FALSE)

  if (!all(values %in% c(0, 1))) {
    invalid_values <- unique(
      values[!values %in% c(0, 1)]
    )

    stop(
      "Data hanya boleh berisi nilai 0 atau 1. ",
      "Nilai tidak valid: ",
      paste(invalid_values, collapse = ", ")
    )
  }

  invisible(TRUE)
}

Try the ConverTier2 package in your browser

Any scripts or data that you put into this service are public.

ConverTier2 documentation built on Nov. 12, 2026, 1:07 a.m.