aboutsummaryrefslogtreecommitdiff
path: root/R/mmkin.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/mmkin.R')
-rw-r--r--R/mmkin.R113
1 files changed, 91 insertions, 22 deletions
diff --git a/R/mmkin.R b/R/mmkin.R
index b713ae74..4f3f28a9 100644
--- a/R/mmkin.R
+++ b/R/mmkin.R
@@ -1,24 +1,65 @@
-# Copyright (C) 2015,2019 Johannes Ranke
-# Contact: jranke@uni-bremen.de
-# The summary function is an adapted and extended version of summary.modFit
-# from the FME package, v 1.1 by Soetart and Petzoldt, which was in turn
-# inspired by summary.nls.lm
-
-# This file is part of the R package mkin
-
-# mkin is free software: you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation, either version 3 of the License, or (at your option) any later
-# version.
-
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-
-# You should have received a copy of the GNU General Public License along with
-# this program. If not, see <http://www.gnu.org/licenses/>
-
+#' Fit one or more kinetic models with one or more state variables to one or
+#' more datasets
+#'
+#' This function calls \code{\link{mkinfit}} on all combinations of models and
+#' datasets specified in its first two arguments.
+#'
+#' @param models Either a character vector of shorthand names like
+#' \code{c("SFO", "FOMC", "DFOP", "HS", "SFORB")}, or an optionally named
+#' list of \code{\link{mkinmod}} objects.
+#' @param datasets An optionally named list of datasets suitable as observed
+#' data for \code{\link{mkinfit}}.
+#' @param cores The number of cores to be used for multicore processing. This
+#' is only used when the \code{cluster} argument is \code{NULL}. On Windows
+#' machines, cores > 1 is not supported, you need to use the \code{cluster}
+#' argument to use multiple logical processors.
+#' @param cluster A cluster as returned by \code{\link{makeCluster}} to be used
+#' for parallel execution.
+#' @param \dots Further arguments that will be passed to \code{\link{mkinfit}}.
+#' @importFrom parallel mclapply parLapply detectCores
+#' @return A matrix of \code{\link{mkinfit}} objects that can be indexed using
+#' the model and dataset names as row and column indices.
+#' @author Johannes Ranke
+#' @seealso \code{\link{[.mmkin}} for subsetting, \code{\link{plot.mmkin}} for
+#' plotting.
+#' @keywords optimize
+#' @examples
+#'
+#' \dontrun{
+#' m_synth_SFO_lin <- mkinmod(parent = mkinsub("SFO", "M1"),
+#' M1 = mkinsub("SFO", "M2"),
+#' M2 = mkinsub("SFO"), use_of_ff = "max")
+#'
+#' m_synth_FOMC_lin <- mkinmod(parent = mkinsub("FOMC", "M1"),
+#' M1 = mkinsub("SFO", "M2"),
+#' M2 = mkinsub("SFO"), use_of_ff = "max")
+#'
+#' models <- list(SFO_lin = m_synth_SFO_lin, FOMC_lin = m_synth_FOMC_lin)
+#' datasets <- lapply(synthetic_data_for_UBA_2014[1:3], function(x) x$data)
+#' names(datasets) <- paste("Dataset", 1:3)
+#'
+#' time_default <- system.time(fits.0 <- mmkin(models, datasets, quiet = TRUE))
+#' time_1 <- system.time(fits.4 <- mmkin(models, datasets, cores = 1, quiet = TRUE))
+#'
+#' time_default
+#' time_1
+#'
+#' endpoints(fits.0[["SFO_lin", 2]])
+#'
+#' # plot.mkinfit handles rows or columns of mmkin result objects
+#' plot(fits.0[1, ])
+#' plot(fits.0[1, ], obs_var = c("M1", "M2"))
+#' plot(fits.0[, 1])
+#' # Use double brackets to extract a single mkinfit object, which will be plotted
+#' # by plot.mkinfit and can be plotted using plot_sep
+#' plot(fits.0[[1, 1]], sep_obs = TRUE, show_residuals = TRUE, show_errmin = TRUE)
+#' plot_sep(fits.0[[1, 1]])
+#' # Plotting with mmkin (single brackets, extracting an mmkin object) does not
+#' # allow to plot the observed variables separately
+#' plot(fits.0[1, 1])
+#' }
+#'
+#' @export mmkin
mmkin <- function(models = c("SFO", "FOMC", "DFOP"), datasets,
cores = round(detectCores()/2), cluster = NULL, ...)
{
@@ -66,7 +107,35 @@ mmkin <- function(models = c("SFO", "FOMC", "DFOP"), datasets,
return(results)
}
-"[.mmkin" <- function(x, i, j, ..., drop = FALSE) {
+#' Subsetting method for mmkin objects
+#'
+#' Subsetting method for mmkin objects.
+#'
+#' @param x An \code{\link{mmkin} object}
+#' @param i Row index selecting the fits for specific models
+#' @param j Column index selecting the fits to specific datasets
+#' @param ... Not used, only there to satisfy the generic method definition
+#' @param drop If FALSE, the method always returns an mmkin object, otherwise
+#' either a list of mkinfit objects or a single mkinfit object.
+#' @return An object of class \code{\link{mmkin}}.
+#' @author Johannes Ranke
+#' @rdname Extract.mmkin
+#' @examples
+#'
+#' # Only use one core, to pass R CMD check --as-cran
+#' fits <- mmkin(c("SFO", "FOMC"), list(B = FOCUS_2006_B, C = FOCUS_2006_C),
+#' cores = 1, quiet = TRUE)
+#' fits["FOMC", ]
+#' fits[, "B"]
+#' fits["SFO", "B"]
+#'
+#' head(
+#' # This extracts an mkinfit object with lots of components
+#' fits[["FOMC", "B"]]
+#' )
+#'
+#' @export
+`[.mmkin` <- function(x, i, j, ..., drop = FALSE) {
class(x) <- NULL
x_sub <- x[i, j, drop = drop]
if (!drop) class(x_sub) <- "mmkin"

Contact - Imprint