Contexte
Trou silencieux entre deux modules :
detect_column_types() (R/data_types.R) classe les factors comme character (intentionnel, testé : test-data-types.R:27-30) → ils reçoivent les règles by_type: character (case_insensitive, trim) ;
- mais
normalize_text() ne transforme que les vecteurs is.character() (R/preprocessing.R) et preprocess_dataframe garde le même prédicat → une colonne factor n'est jamais trimée/lowercasée, sans aucun avertissement.
Résultat : mêmes données, verdict différent selon que la colonne est character ou factor — surprenant pour l'utilisateur (stringsAsFactors, imports SAS/SPSS via haven, etc.).
Reprex
library(datadiff)
ref <- data.frame(id = 1:2, s = c("alpha", "beta"))
cand_chr <- data.frame(id = 1:2, s = c("ALPHA", " beta"))
cand_fct <- data.frame(id = 1:2, s = factor(c("ALPHA", " beta")))
path <- tempfile(fileext = ".yaml")
write_rules_template(ref, key = "id", path = path,
character_case_insensitive = TRUE, character_trim = TRUE)
compare_datasets_from_yaml(ref, cand_chr, key = "id", path = path)$all_passed # TRUE
compare_datasets_from_yaml(ref, cand_fct, key = "id", path = path)$all_passed # FALSE (ou type_mismatch)
# même contenu logique, verdicts différents, aucun warning expliquant pourquoi
Critères de succès
Contexte
Trou silencieux entre deux modules :
detect_column_types()(R/data_types.R) classe les factors commecharacter(intentionnel, testé : test-data-types.R:27-30) → ils reçoivent les règlesby_type: character(case_insensitive,trim) ;normalize_text()ne transforme que les vecteursis.character()(R/preprocessing.R) etpreprocess_dataframegarde le même prédicat → une colonne factor n'est jamais trimée/lowercasée, sans aucun avertissement.Résultat : mêmes données, verdict différent selon que la colonne est character ou factor — surprenant pour l'utilisateur (
stringsAsFactors, imports SAS/SPSS via haven, etc.).Reprex
Critères de succès
factor → characteren préprocessing (avec note dans la doc), soit warning explicite (« column 's' is a factor; text normalization rules are not applied »).detect_column_types()(list-columns, integer64) : verdict défini ou warning.