Nothing
devtools::load_all()
# --- Données réalistes ---
generer_donnees <- function(n) {
caisses_possibles <- c(NA, "CNAVPL", "SRE", "CNRACL", "Regime special",
"MSA exploitant", "Agirc-Arrco", "Ircantec")
categories_par_caisse <- list(
"NA" = c(NA, "invalide", "inapte"),
"CNAVPL" = c(NA, "inapte"),
"SRE" = c("actif", "sedentaire", "superactif"),
"CNRACL" = c("actif", "sedentaire", "superactif"),
"Regime special" = c("actif", "sedentaire", "superactif"),
"MSA exploitant" = NA_character_,
"Agirc-Arrco" = NA_character_,
"Ircantec" = NA_character_
)
caisse <- sample(caisses_possibles, n, replace = TRUE)
categorie <- vapply(caisse, function(c) {
key <- if(is.na(c)) "NA" else c
cats <- categories_par_caisse[[key]]
sample(cats, 1)
}, character(1), USE.NAMES = FALSE)
dateNaissance <- as.Date(paste0(sample(1940:2000, n, replace = TRUE), "-01-01"))
dateLiq <- dateNaissance + sample(57:70, n, replace = TRUE) * 365.25
list(
dateNaissance = dateNaissance,
dateLiq = as.Date(dateLiq),
caisse = caisse,
categorie = categorie
)
}
# --- Lookup mémoïsé ---
# On mémoïse aod_lookup et on vide le cache à chaque itération
# pour mesurer le coût "froid" (réaliste : une seule exécution par session)
aod_lookup_memo <- memoise::memoise(aod_lookup)
# --- Benchmark ---
sizes <- as.integer(10^(1:6))
res <- bench::press(
n = sizes,
{
d <- generer_donnees(n)
bench::mark(
standard = aod_lookup(d$dateNaissance, d$dateLiq, d$caisse, d$categorie),
dedup = aod_lookup_dedup(d$dateNaissance, d$dateLiq, d$caisse, d$categorie),
memo_froid = {
memoise::forget(aod_lookup_memo)
aod_lookup_memo(d$dateNaissance, d$dateLiq, d$caisse, d$categorie)
},
memo_chaud = aod_lookup_memo(d$dateNaissance, d$dateLiq, d$caisse, d$categorie),
iterations = 5,
check = FALSE,
min_time = 0.05
)
}
)
cat("\n=== Résultats ===\n")
print(res[, c("expression", "n", "median", "mem_alloc")], n = Inf)
cat("\n=== Nb combinaisons uniques pour chaque n ===\n")
for(n in sizes) {
d <- generer_donnees(n)
nu <- nrow(unique(data.table(d$dateNaissance, d$dateLiq, d$caisse, d$categorie)))
cat(sprintf("n = %7d → %d uniques\n", n, nu))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.