aboutsummaryrefslogtreecommitdiff
path: root/R
diff options
context:
space:
mode:
Diffstat (limited to 'R')
-rw-r--r--R/mmkin.R46
1 files changed, 46 insertions, 0 deletions
diff --git a/R/mmkin.R b/R/mmkin.R
new file mode 100644
index 00000000..fe9db194
--- /dev/null
+++ b/R/mmkin.R
@@ -0,0 +1,46 @@
+mmkin <- function(models = c("SFO", "FOMC", "DFOP"), datasets,
+ cores = round(detectCores()/2), cluster = NULL, ...)
+{
+ parent_models_available = c("SFO", "FOMC", "DFOP", "HS", "SFORB", "IORE")
+ n.m <- length(models)
+ n.d <- length(datasets)
+ n.fits <- n.m * n.d
+ fit_indices <- matrix(1:n.fits, ncol = n.d)
+
+ # Check models and define their names
+ if (!all(sapply(models, function(x) inherits(x, "mkinmod")))) {
+ if (!all(models %in% parent_models_available)) {
+ stop("Please supply models as a list of mkinmod objects or a vector combined of\n ",
+ paste(parent_models_available, collapse = ", "))
+ } else {
+ names(models) <- models
+ }
+ } else {
+ if (is.null(names(models))) names(models) <- as.character(1:n.m)
+ }
+
+ # Check datasets and define their names
+ if (is.null(names(datasets))) names(datasets) <- as.character(1:n.d)
+
+ # Define names for fit index
+ dimnames(fit_indices) <- list(model = names(models),
+ dataset = names(datasets))
+
+
+ fit_function <- function(fit_index) {
+ w <- which(fit_indices == fit_index, arr.ind = TRUE)
+ model_index <- w[1]
+ dataset_index <- w[2]
+ mkinfit(models[[model_index]], datasets[[dataset_index]], ...)
+ }
+
+ if (is.null(cluster)) {
+ results <- mclapply(as.list(1:n.fits), fit_function, mc.cores = cores)
+ } else {
+ results <- parLapply(cluster, list(1:n.fit), fit_function)
+ }
+
+ attributes(results) <- attributes(fit_indices)
+ class(results) <- "mmkin"
+ return(results)
+}

Contact - Imprint