R/utils-item_bank.R

Defines functions remove_melodies

# TODO: Optimise the 3 remove_melodies function (there is redundancy between them)

remove_melodies <- function(item_bank, remove_melodies_with_only_repeated_notes, remove_melodies_with_any_repeated_notes) {

  item_bank <- item_bank %>%
    {if(remove_melodies_with_only_repeated_notes) remove_melodies_with_only_repeated_notes(.) else . } %>%
    {if(remove_melodies_with_any_repeated_notes) remove_melodies_with_any_repeated_notes(.) else . }

  item_bank
}


remove_melodies_with_any_repeated_notes <- function(item_bank) {
  item_bank %>%
    dplyr::rowwise() %>%
    dplyr::mutate(consec_repeated_values = try_or_log_error_return_na(dplyr::case_when(any(rle( str_mel_to_vector(abs_melody) )$lengths > 1) ~ TRUE, TRUE ~ FALSE ))) %>%
    dplyr::ungroup() %>%
    dplyr::filter(!consec_repeated_values)
    dplyr::select(-consec_repeated_values)
}


remove_melodies_with_only_repeated_notes <- function(item_bank) {
  item_bank %>%
    dplyr::rowwise() %>%
    dplyr::mutate(consec_repeated_values = try_or_log_error_return_na(dplyr::case_when( stats::var(str_mel_to_vector(abs_melody)) == 0 ~ TRUE, TRUE ~ FALSE ))) %>%
    dplyr::ungroup() %>%
    dplyr::filter(!consec_repeated_values) %>%
    dplyr::select(-consec_repeated_values)
}
sebsilas/itembankr documentation built on July 16, 2025, 10:18 p.m.