R Script to Launch Multiple NONMEM Runs with Wings

Ce script permet de lancer tous les runs d’un répertoire avec nmgo
il liste tous les fichiers *.ctl et les exécutent
la fonction utilisée est run_all_nmgo()
Exemple avec l’appel de la fonction suivante, tous les fichiers *.ctl du répertoire analyse_theo seront lancés par nmgo
run_all_nmgo(
dir_path = « C:/nm76g64/run/analyse_theo »
)

run_all_nmgo <- function(
dir_path,
wfn_bat = "C:/nm76g64/wfn7/bin/wfn.bat",
nmgo_bat = "C:/nm76g64/wfn7/bin/nmgo.bat"
) {
dir_path <- normalizePath(dir_path, mustWork = TRUE)
ctl_files <- list.files(dir_path, pattern = "\\.ctl$", full.names = FALSE)
if (length(ctl_files) == 0) stop("Aucun fichier .ctl trouvé dans : ", dir_path)
run_names <- tools::file_path_sans_ext(ctl_files)
message(length(run_names), " run(s) détecté(s) : ", paste(run_names, collapse = ", "))
to_win <- function(x) gsub("/", "\\\\", x)
dir_win <- to_win(dir_path)
wfn_win <- to_win(wfn_bat)
nmgo_win <- to_win(nmgo_bat)
results <- lapply(run_names, function(run) {
message("\n>>> Lancement : ", run)
bat_tmp <- tempfile(fileext = ".bat")
writeLines(c(
"@echo off",
# 1. Initialiser tout l'environnement WFN (-q pour mode silencieux)
paste0("call \"", wfn_win, "\" -q"),
# 2. Se placer dans le répertoire des .ctl
paste0("cd /d \"", dir_win, "\""),
# 3. Lancer nmgo
paste0("call \"", nmgo_win, "\" ", run)
), bat_tmp)
status <- shell(bat_tmp, wait = TRUE)
file.remove(bat_tmp)
if (status == 0) message(" OK : ", run)
else warning(" ÉCHEC (code ", status, ") : ", run)
list(run = run, status = status)
})
df <- do.call(rbind, lapply(results, as.data.frame))
message("\n=== Résumé ===")
print(df)
invisible(df)
}