From d5575c40e2cb6b8d3fe6d1277a856aed73f8e176 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Mon, 26 Oct 2020 16:54:26 +0100
Subject: [PATCH] add function mT.setSlot to set any slot within a mortality
 table

---
 NAMESPACE            |  1 +
 R/utilityFunctions.R | 60 ++++++++++++++++++++++++++++++++++++++++++++
 man/mT.setSlot.Rd    | 46 +++++++++++++++++++++++++++++++++
 3 files changed, 107 insertions(+)
 create mode 100644 man/mT.setSlot.Rd

diff --git a/NAMESPACE b/NAMESPACE
index 79b81d9..938360d 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -74,6 +74,7 @@ exportMethods(getPeriodTable)
 exportMethods(lifeTable)
 exportMethods(mT.cleanup)
 exportMethods(mT.round)
+exportMethods(mT.setSlot)
 exportMethods(mortalityImprovement)
 exportMethods(periodDeathProbabilities)
 exportMethods(periodTransitionProbabilities)
diff --git a/R/utilityFunctions.R b/R/utilityFunctions.R
index 4dd1fbd..9afbf5e 100644
--- a/R/utilityFunctions.R
+++ b/R/utilityFunctions.R
@@ -951,3 +951,63 @@ pT.recalculateTotalMortality = function(object, ...) {
     object
 }
 
+
+
+#' Set a certain slot of the mortality tables (or of each element of the list of tables)
+#'
+#' The function mt.setSlot adds the given slot to all mortalityTable objects.
+#'
+#' @param object The mortalityTable object to be modified (or a list / array of mortalityTable object)
+#' @param slot the desired slot to set
+#' @param value the value for the slot
+#'
+#' @examples
+#' mortalityTables.load("Austria_Census")
+#' # Add 10-year selection factors to the population mortality
+#' mort.AT.census.2011.male.select = mT.setSlot(mort.AT.census.2011.male, "selectionFactors", 1:10/10)
+#'
+#' @exportMethod mT.setSlot
+setGeneric("mT.setSlot", function(object, slot, value = NULL) standardGeneric("mT.setSlot"));
+
+#' @describeIn mT.setSlot Set a slot for the given mortalityTable
+setMethod("mT.setSlot", "mortalityTable",
+          function(object, slot, value = NULL) {
+              slot(object, slot) <- value
+              object
+          })
+#' @describeIn mT.setSlot Set a slot for the mortalityTables stored in an array
+setMethod("mT.setSlot", "array",
+          function(object, slot, value = NULL) {
+              array(
+                  lapply(object, mT.setSlot, slot = slot, value = value),
+                  dim = dim(object), dimnames = dimnames(object))
+          })
+#' @describeIn mT.setSlot Set a slot for the given mortalityTables stored in a list
+setMethod("mT.setSlot", "list",
+          function(object, slot, value = NULL) {
+              lapply(object, mT.setSlot, slot = slot, value = value)
+          })
+
+#' @describeIn mT.setSlot Set a slot for all components of a pensionTable
+setMethod("mT.setSlot", "pensionTable",
+          function(object, slot, value = NULL) {
+              object@qx = mT.setSlot(object@qx, slot = slot, value = value)
+              object@ix = mT.setSlot(object@ix, slot = slot, value = value)
+              object@qix = mT.setSlot(object@qix, slot = slot, value = value)
+              object@rx = mT.setSlot(object@rx, slot = slot, value = value)
+              object@apx = mT.setSlot(object@apx, slot = slot, value = value)
+              object@qpx = mT.setSlot(object@qpx, slot = slot, value = value)
+              object@hx = mT.setSlot(object@hx, slot = slot, value = value)
+              object@qwy = mT.setSlot(object@qwy, slot = slot, value = value)
+              object@qgx = mT.setSlot(object@qgx, slot = slot, value = value)
+              object
+          })
+
+#' @describeIn mT.setSlot Empty dummy function that simply returns NULL
+setMethod("mT.setSlot", "NULL",
+          function(object, slot, value = NULL) {
+              NULL
+          })
+
+
+
diff --git a/man/mT.setSlot.Rd b/man/mT.setSlot.Rd
new file mode 100644
index 0000000..6edcd94
--- /dev/null
+++ b/man/mT.setSlot.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utilityFunctions.R
+\name{mT.setSlot}
+\alias{mT.setSlot}
+\alias{mT.setSlot,mortalityTable-method}
+\alias{mT.setSlot,array-method}
+\alias{mT.setSlot,list-method}
+\alias{mT.setSlot,pensionTable-method}
+\alias{mT.setSlot,NULL-method}
+\title{Set a certain slot of the mortality tables (or of each element of the list of tables)}
+\usage{
+mT.setSlot(object, slot, value = NULL)
+
+\S4method{mT.setSlot}{mortalityTable}(object, slot, value = NULL)
+
+\S4method{mT.setSlot}{array}(object, slot, value = NULL)
+
+\S4method{mT.setSlot}{list}(object, slot, value = NULL)
+
+\S4method{mT.setSlot}{pensionTable}(object, slot, value = NULL)
+
+\S4method{mT.setSlot}{`NULL`}(object, slot, value = NULL)
+}
+\arguments{
+\item{object}{The mortalityTable object to be modified (or a list / array of mortalityTable object)}
+
+\item{slot}{the desired slot to set}
+
+\item{value}{the value for the slot}
+}
+\description{
+The function mt.setSlot adds the given slot to all mortalityTable objects.
+}
+\section{Methods (by class)}{
+\itemize{
+\item \code{mortalityTable}: Set a slot for the given mortalityTable
+
+\item \code{array}: Set a slot for the mortalityTables stored in an array
+
+\item \code{list}: Set a slot for the given mortalityTables stored in a list
+
+\item \code{pensionTable}: Set a slot for all components of a pensionTable
+
+\item \code{NULL}: Empty dummy function that simply returns NULL
+}}
+
-- 
GitLab