aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Ranke <jranke@uni-bremen.de>2019-10-10 08:53:30 +0200
committerJohannes Ranke <jranke@uni-bremen.de>2019-10-10 08:53:30 +0200
commita5e458ecb33ae87e46b2237174a194f6252a97cf (patch)
tree07f96162166021f73d823b61e96e5438e7dfb6d8
parent63df3871a442de4bf47e4d9de1449e7f6ed65b2f (diff)
Finish documentation of set_nd and test it
-rw-r--r--ChangeLog6
-rw-r--r--DESCRIPTION2
-rw-r--r--R/set_nd.R (renamed from R/process_residues.R)6
-rw-r--r--_pkgdown.yml1
-rw-r--r--docs/reference/index.html15
-rw-r--r--docs/reference/set_nd.html247
-rw-r--r--docs/sitemap.xml3
-rw-r--r--man/set_nd.Rd8
-rw-r--r--test.log27
-rw-r--r--tests/testthat/test_set_nd.R42
10 files changed, 339 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 17ffa8a..a14aa23 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+commit 63df3871a442de4bf47e4d9de1449e7f6ed65b2f
+Author: Johannes Ranke <jranke@uni-bremen.de>
+Date: 2019-10-09 19:17:07 +0200
+
+ Function to set non-detects in residue series
+
commit 9f848a9518aabf162723271bafba244221ee83ed
Author: Johannes Ranke <johannes.ranke@jrwb.de>
Date: 2019-09-27 12:55:03 +0200
diff --git a/DESCRIPTION b/DESCRIPTION
index 73c561d..39e174b 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -2,7 +2,7 @@ Package: pfm
Type: Package
Title: Utilities for Pesticide Fate Modelling
Version: 0.5.7
-Date: 2019-10-09
+Date: 2019-10-10
Authors@R: person("Johannes Ranke", email = "jranke@uni-bremen.de",
role = c("aut", "cre", "cph"),
comment = c(ORCID = "0000-0003-4371-6538"))
diff --git a/R/process_residues.R b/R/set_nd.R
index 35d3a4e..5d98940 100644
--- a/R/process_residues.R
+++ b/R/set_nd.R
@@ -16,6 +16,8 @@
#' @param lod Limit of detection (numeric)
#' @param loq Limit of quantification(numeric). Must be specified if the FOCUS rule to
#' stop after the first non-detection is to be applied
+#' @param time_zero Is the first value in the series a time zero value?
+#' @param time_zero_nd_value Which value should we use for non-detects at time zero?
#' @param stop_after_first_nondetect Should we really stop after the first non-detection?
#' @references FOCUS (2014) p. 75, 76, 131, 132
#' @export
@@ -100,8 +102,8 @@ set_nd <- function(r, lod, loq = NA,
#' @describeIn set_nd Set non-detects in residues series according to FOCUS rules
#' @export
-set_nd_focus <- function(res, lod, loq = NA, time_zero = TRUE) {
- result <- set_nd(res, lod, loq = loq, time_zero = time_zero,
+set_nd_focus <- function(r, lod, loq = NA, time_zero = TRUE) {
+ result <- set_nd(r, lod, loq = loq, time_zero = time_zero,
time_zero_nd_value = 0, stop_after_first_nondetect = TRUE)
return(result)
}
diff --git a/_pkgdown.yml b/_pkgdown.yml
index bec5bf7..e12082d 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -18,6 +18,7 @@ reference:
- pfm_degradation
- SFO_actual_twa
- FOMC_actual_twa
+ - set_nd
- title: Predicted environmental concentrations in soil
contents:
- PEC_soil
diff --git a/docs/reference/index.html b/docs/reference/index.html
index e1acfc1..a704ad0 100644
--- a/docs/reference/index.html
+++ b/docs/reference/index.html
@@ -167,6 +167,21 @@
<p><code><a href="FOMC_actual_twa.html">FOMC_actual_twa()</a></code> </p>
</td>
<td><p>Actual and maximum moving window time average concentrations for FOMC kinetics</p></td>
+ </tr><tr>
+
+ <td>
+ <p><code><a href="set_nd.html">set_nd()</a></code> <code><a href="set_nd.html">set_nd_focus()</a></code> </p>
+ </td>
+ <td><p>Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq.</p></td>
</tr>
</tbody><tbody>
<tr>
diff --git a/docs/reference/set_nd.html b/docs/reference/set_nd.html
new file mode 100644
index 0000000..32ac155
--- /dev/null
+++ b/docs/reference/set_nd.html
@@ -0,0 +1,247 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq. — set_nd • pfm</title>
+
+<!-- jquery -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" />
+<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/all.min.css" integrity="sha256-nAmazAk6vS34Xqo0BSrTb+abbtFlgsFK7NKSi6o7Y78=" crossorigin="anonymous" />
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/v4-shims.min.css" integrity="sha256-6qHlizsOWFskGlwVOKuns+D1nB6ssZrHQrNj1wGplHc=" crossorigin="anonymous" />
+
+<!-- clipboard.js -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js" integrity="sha256-FiZwavyI2V6+EXO1U+xzLG3IKldpiTFf3153ea9zikQ=" crossorigin="anonymous"></script>
+
+<!-- headroom.js -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.4/headroom.min.js" integrity="sha256-DJFC1kqIhelURkuza0AvYal5RxMtpzLjFhsnVIeuk+U=" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.4/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../pkgdown.js"></script>
+
+
+
+<meta property="og:title" content="Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq. — set_nd" />
+
+<meta property="og:description" content="Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq." />
+<meta name="twitter:card" content="summary" />
+
+
+
+<!-- mathjax -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+
+ </head>
+
+ <body>
+ <div class="container template-reference-topic">
+ <header>
+ <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <span class="navbar-brand">
+ <a class="navbar-link" href="../index.html">pfm</a>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.5.7</span>
+ </span>
+ </div>
+
+ <div id="navbar" class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="../index.html">
+ <span class="fas fa fas fa-home fa-lg"></span>
+
+ </a>
+</li>
+<li>
+ <a href="../reference/index.html">Reference</a>
+</li>
+ </ul>
+
+ <ul class="nav navbar-nav navbar-right">
+
+ </ul>
+
+ </div><!--/.nav-collapse -->
+ </div><!--/.container -->
+</div><!--/.navbar -->
+
+
+
+ </header>
+
+<div class="row">
+ <div class="col-md-9 contents">
+ <div class="page-header">
+ <h1>Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq.</h1>
+
+ <div class="hidden name"><code>set_nd.Rd</code></div>
+ </div>
+
+ <div class="ref-description">
+
+ <p>Set non-detects in residue series without replicates
+Sets non-detects directly before or directly after detects to NA. Values between
+lod and loq are set to their mean value if an loq is specified.
+If 'time_zero' is set to TRUE, the residue series is assumed to start with time
+zero, and non-detects at time zero are set to 'time_zero_nd_value'. For the
+set_nd_focus variant, this is zero, otherwise this argument has NA as default
+value.
+If stopping after the first non-detection is requested, as in in the FOCUS
+variant of the function, an loq has to be specified in order to decide
+if any later detections are above the loq.</p>
+
+ </div>
+
+ <pre class="usage"><span class='fu'>set_nd</span>(<span class='no'>r</span>, <span class='no'>lod</span>, <span class='kw'>loq</span> <span class='kw'>=</span> <span class='fl'>NA</span>, <span class='kw'>time_zero</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>time_zero_nd_value</span> <span class='kw'>=</span> <span class='fl'>NA</span>,
+ <span class='kw'>stop_after_first_nondetect</span> <span class='kw'>=</span> <span class='fl'>FALSE</span>)
+
+<span class='fu'>set_nd_focus</span>(<span class='no'>r</span>, <span class='no'>lod</span>, <span class='kw'>loq</span> <span class='kw'>=</span> <span class='fl'>NA</span>, <span class='kw'>time_zero</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>)</pre>
+
+ <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
+ <table class="ref-arguments">
+ <colgroup><col class="name" /><col class="desc" /></colgroup>
+ <tr>
+ <th>r</th>
+ <td><p>A character vector of sequential residues without replicates, with
+non-detects specified as 'nd' and unquantified values above the limit of
+detection specified as 'nq', otherwise coercible to numeric</p></td>
+ </tr>
+ <tr>
+ <th>lod</th>
+ <td><p>Limit of detection (numeric)</p></td>
+ </tr>
+ <tr>
+ <th>loq</th>
+ <td><p>Limit of quantification(numeric). Must be specified if the FOCUS rule to
+stop after the first non-detection is to be applied</p></td>
+ </tr>
+ <tr>
+ <th>time_zero</th>
+ <td><p>Is the first value in the series a time zero value?</p></td>
+ </tr>
+ <tr>
+ <th>time_zero_nd_value</th>
+ <td><p>Which value should we use for non-detects at time zero?</p></td>
+ </tr>
+ <tr>
+ <th>stop_after_first_nondetect</th>
+ <td><p>Should we really stop after the first non-detection?</p></td>
+ </tr>
+ </table>
+
+ <h2 class="hasAnchor" id="functions"><a class="anchor" href="#functions"></a>Functions</h2>
+
+
+<ul>
+<li><p><code>set_nd_focus</code>: Set non-detects in residues series according to FOCUS rules</p></li>
+</ul>
+
+ <h2 class="hasAnchor" id="references"><a class="anchor" href="#references"></a>References</h2>
+
+ <p>FOCUS (2014) p. 75, 76, 131, 132</p>
+
+
+ <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+ <pre class="examples"><div class='input'><span class='no'>parent_1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='fl'>.12</span>, <span class='fl'>.09</span>, <span class='fl'>.05</span>, <span class='fl'>.03</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>)
+<span class='fu'>set_nd</span>(<span class='no'>parent_1</span>, <span class='fl'>0.02</span>)</div><div class='output co'>#&gt; [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA</div><div class='input'><span class='no'>parent_2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='fl'>.12</span>, <span class='fl'>.09</span>, <span class='fl'>.05</span>, <span class='fl'>.03</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='fl'>.03</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>)
+<span class='fu'>set_nd</span>(<span class='no'>parent_2</span>, <span class='fl'>0.02</span>)</div><div class='output co'>#&gt; [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.03 0.01 NA NA</div><div class='input'><span class='fu'>set_nd_focus</span>(<span class='no'>parent_2</span>, <span class='fl'>0.02</span>, <span class='kw'>loq</span> <span class='kw'>=</span> <span class='fl'>0.05</span>)</div><div class='output co'>#&gt; [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA</div><div class='input'><span class='no'>parent_3</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='fl'>.12</span>, <span class='fl'>.09</span>, <span class='fl'>.05</span>, <span class='fl'>.03</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='fl'>.06</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>)
+<span class='fu'>set_nd</span>(<span class='no'>parent_3</span>, <span class='fl'>0.02</span>)</div><div class='output co'>#&gt; [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA</div><div class='input'><span class='fu'>set_nd_focus</span>(<span class='no'>parent_3</span>, <span class='fl'>0.02</span>, <span class='kw'>loq</span> <span class='kw'>=</span> <span class='fl'>0.05</span>)</div><div class='output co'>#&gt; [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA</div><div class='input'><span class='no'>metabolite</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span>(<span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>, <span class='fl'>0.03</span>, <span class='fl'>0.06</span>, <span class='fl'>0.10</span>, <span class='fl'>0.11</span>, <span class='fl'>0.10</span>, <span class='fl'>0.09</span>, <span class='fl'>0.05</span>, <span class='fl'>0.03</span>, <span class='st'>"nd"</span>, <span class='st'>"nd"</span>)
+<span class='fu'>set_nd</span>(<span class='no'>metabolite</span>, <span class='fl'>0.02</span>)</div><div class='output co'>#&gt; [1] NA NA 0.01 0.03 0.06 0.10 0.11 0.10 0.09 0.05 0.03 0.01 NA</div></pre>
+ </div>
+ <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+ <h2>Contents</h2>
+ <ul class="nav nav-pills nav-stacked">
+ <li><a href="#arguments">Arguments</a></li>
+
+ <li><a href="#functions">Functions</a></li>
+
+ <li><a href="#references">References</a></li>
+
+ <li><a href="#examples">Examples</a></li>
+ </ul>
+
+ </div>
+</div>
+
+
+ <footer>
+ <div class="copyright">
+ <p>Developed by Johannes Ranke.</p>
+</div>
+
+<div class="pkgdown">
+ <p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.4.1.</p>
+</div>
+
+ </footer>
+ </div>
+
+
+
+
+ </body>
+</html>
+
+
diff --git a/docs/sitemap.xml b/docs/sitemap.xml
index 6eff936..79d9b14 100644
--- a/docs/sitemap.xml
+++ b/docs/sitemap.xml
@@ -100,6 +100,9 @@
<loc>https://pkgdown.jrwb.de/pfm/reference/sawtooth.html</loc>
</url>
<url>
+ <loc>https://pkgdown.jrwb.de/pfm/reference/set_nd.html</loc>
+ </url>
+ <url>
<loc>https://pkgdown.jrwb.de/pfm/reference/soil_scenario_data_EFSA_2015.html</loc>
</url>
<url>
diff --git a/man/set_nd.Rd b/man/set_nd.Rd
index 8c766ac..8c6003c 100644
--- a/man/set_nd.Rd
+++ b/man/set_nd.Rd
@@ -1,5 +1,5 @@
% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/process_residues.R
+% Please edit documentation in R/set_nd.R
\name{set_nd}
\alias{set_nd}
\alias{set_nd_focus}
@@ -17,7 +17,7 @@ if any later detections are above the loq.}
set_nd(r, lod, loq = NA, time_zero = TRUE, time_zero_nd_value = NA,
stop_after_first_nondetect = FALSE)
-set_nd_focus(res, lod, loq = NA, time_zero = TRUE)
+set_nd_focus(r, lod, loq = NA, time_zero = TRUE)
}
\arguments{
\item{r}{A character vector of sequential residues without replicates, with
@@ -29,6 +29,10 @@ detection specified as 'nq', otherwise coercible to numeric}
\item{loq}{Limit of quantification(numeric). Must be specified if the FOCUS rule to
stop after the first non-detection is to be applied}
+\item{time_zero}{Is the first value in the series a time zero value?}
+
+\item{time_zero_nd_value}{Which value should we use for non-detects at time zero?}
+
\item{stop_after_first_nondetect}{Should we really stop after the first non-detection?}
}
\description{
diff --git a/test.log b/test.log
index bd894ec..06512a8 100644
--- a/test.log
+++ b/test.log
@@ -2,23 +2,24 @@ Loading pfm
Loading required package: R6
Loading required package: mkin
Testing pfm
-✔ | OK F W S | Context
- ⠏ | 0 | Exposit calculations ⠋ | 1 | Exposit calculations ⠙ | 2 | Exposit calculations ⠹ | 3 | Exposit calculations ⠸ | 4 | Exposit calculations ⠼ | 5 | Exposit calculations ⠴ | 6 | Exposit calculations ⠦ | 7 | Exposit calculations ✔ | 7 | Exposit calculations
- ⠏ | 0 | Geometric mean calculation ⠋ | 1 | Geometric mean calculation ⠙ | 2 | Geometric mean calculation ⠹ | 3 | Geometric mean calculation ⠸ | 4 | Geometric mean calculation ⠼ | 5 | Geometric mean calculation ⠴ | 6 | Geometric mean calculation ✔ | 6 | Geometric mean calculation
- ⠏ | 0 | Check max_twa for parent mkinfit models against analytical solutions ⠋ | 1 | Check max_twa for parent mkinfit models against analytical solutions ✔ | 1 | Check max_twa for parent mkinfit models against analytical solutions [2.0 s]
- ⠏ | 0 | Simple PEC sediment calculations ⠋ | 1 | Simple PEC sediment calculations ✔ | 1 | Simple PEC sediment calculations
- ⠏ | 0 | Simple PEC soil calculations ⠋ | 1 | Simple PEC soil calculations ⠙ | 2 | Simple PEC soil calculations ⠹ | 3 | Simple PEC soil calculations ⠸ | 4 | Simple PEC soil calculations ⠼ | 5 | Simple PEC soil calculations ⠴ | 6 | Simple PEC soil calculations ⠦ | 7 | Simple PEC soil calculations ⠧ | 8 | Simple PEC soil calculations ⠇ | 9 | Simple PEC soil calculations ⠏ | 10 | Simple PEC soil calculations ⠋ | 11 | Simple PEC soil calculations ⠙ | 12 | Simple PEC soil calculations ⠹ | 13 | Simple PEC soil calculations ⠸ | 14 | Simple PEC soil calculations ⠼ | 15 | Simple PEC soil calculations ⠴ | 16 | Simple PEC soil calculations ⠦ | 17 | Simple PEC soil calculations ✔ | 17 | Simple PEC soil calculations [0.2 s]
- ⠏ | 0 | Simple PEC surface water calculations with drift entry ⠋ | 1 | Simple PEC surface water calculations with drift entry ⠙ | 2 | Simple PEC surface water calculations with drift entry ✔ | 2 | Simple PEC surface water calculations with drift entry
- ⠏ | 0 | Actual and time weighted average concentrations for SFO kinetics ⠋ | 1 | Actual and time weighted average concentrations for SFO kinetics ✔ | 1 | Actual and time weighted average concentrations for SFO kinetics
- ⠏ | 0 | FOCUS Step 1 calculations ⠋ | 1 | FOCUS Step 1 calculations ⠙ | 2 | FOCUS Step 1 calculations ⠹ | 3 | FOCUS Step 1 calculations ⠸ | 4 | FOCUS Step 1 calculations ⠼ | 5 | FOCUS Step 1 calculations ⠴ | 6 | FOCUS Step 1 calculations ⠦ | 7 | FOCUS Step 1 calculations ⠧ | 8 | FOCUS Step 1 calculations ⠇ | 9 | FOCUS Step 1 calculations ✔ | 9 | FOCUS Step 1 calculations [0.1 s]
- ⠏ | 0 | FOCUS Steps 12 input files ⠋ | 1 | FOCUS Steps 12 input files ⠙ | 2 | FOCUS Steps 12 input files ⠹ | 3 | FOCUS Steps 12 input files ⠸ | 4 | FOCUS Steps 12 input files ⠼ | 5 | FOCUS Steps 12 input files ⠴ | 6 | FOCUS Steps 12 input files ⠦ | 7 | FOCUS Steps 12 input files ⠧ | 8 | FOCUS Steps 12 input files ✔ | 8 | FOCUS Steps 12 input files
- ⠏ | 0 | Read and analyse TOXSWA cwa files ⠋ | 1 | Read and analyse TOXSWA cwa files ⠙ | 2 | Read and analyse TOXSWA cwa files ⠹ | 3 | Read and analyse TOXSWA cwa files ⠸ | 4 | Read and analyse TOXSWA cwa files ⠼ | 5 | Read and analyse TOXSWA cwa files ⠴ | 6 | Read and analyse TOXSWA cwa files ⠦ | 7 | Read and analyse TOXSWA cwa files ✔ | 7 | Read and analyse TOXSWA cwa files [5.6 s]
- ⠏ | 0 | UK drainage PEC calculations ⠋ | 1 | UK drainage PEC calculations ⠙ | 2 | UK drainage PEC calculations ⠹ | 3 | UK drainage PEC calculations ⠸ | 4 | UK drainage PEC calculations ⠼ | 5 | UK drainage PEC calculations ⠴ | 6 | UK drainage PEC calculations ⠦ | 7 | UK drainage PEC calculations ⠧ | 8 | UK drainage PEC calculations ⠇ | 9 | UK drainage PEC calculations ⠏ | 10 | UK drainage PEC calculations ⠋ | 11 | UK drainage PEC calculations ⠙ | 12 | UK drainage PEC calculations ✔ | 12 | UK drainage PEC calculations
+✔ | OK F W S | Context
+ ⠏ | 0 | Exposit calculations ✔ | 7 | Exposit calculations
+ ⠏ | 0 | Geometric mean calculation ✔ | 6 | Geometric mean calculation
+ ⠏ | 0 | Check max_twa for parent mkinfit models against analytical solutions ⠋ | 1 | Check max_twa for parent mkinfit models against analytical solutions ✔ | 1 | Check max_twa for parent mkinfit models against analytical solutions [1.9 s]
+ ⠏ | 0 | Simple PEC sediment calculations ✔ | 1 | Simple PEC sediment calculations
+ ⠏ | 0 | Simple PEC soil calculations ⠙ | 2 | Simple PEC soil calculations ✔ | 17 | Simple PEC soil calculations [0.2 s]
+ ⠏ | 0 | Simple PEC surface water calculations with drift entry ✔ | 2 | Simple PEC surface water calculations with drift entry
+ ⠏ | 0 | Processing of residue series ✔ | 8 | Processing of residue series
+ ⠏ | 0 | Actual and time weighted average concentrations for SFO kinetics ✔ | 1 | Actual and time weighted average concentrations for SFO kinetics
+ ⠏ | 0 | FOCUS Step 1 calculations ⠹ | 3 | FOCUS Step 1 calculations ✔ | 9 | FOCUS Step 1 calculations [0.1 s]
+ ⠏ | 0 | FOCUS Steps 12 input files ✔ | 8 | FOCUS Steps 12 input files
+ ⠏ | 0 | Read and analyse TOXSWA cwa files ⠋ | 1 | Read and analyse TOXSWA cwa files ⠸ | 4 | Read and analyse TOXSWA cwa files ⠼ | 5 | Read and analyse TOXSWA cwa files ⠴ | 6 | Read and analyse TOXSWA cwa files ✔ | 7 | Read and analyse TOXSWA cwa files [5.5 s]
+ ⠏ | 0 | UK drainage PEC calculations ✔ | 12 | UK drainage PEC calculations
══ Results ═════════════════════════════════════════════════════════════════════════════════════════
Duration: 8.0 s
-OK: 71
+OK: 79
Failed: 0
Warnings: 0
Skipped: 0
diff --git a/tests/testthat/test_set_nd.R b/tests/testthat/test_set_nd.R
new file mode 100644
index 0000000..29087a8
--- /dev/null
+++ b/tests/testthat/test_set_nd.R
@@ -0,0 +1,42 @@
+context("Processing of residue series")
+# FOCUS (2014) page 76 (parent) and page 132 (metabolite)
+
+parent_1 <- c(.12, .09, .05, .03, "nd", "nd", "nd", "nd", "nd", "nd")
+parent_2 <- c(.12, .09, .05, .03, "nd", "nd", .03, "nd", "nd", "nd")
+parent_3 <- c(.12, .09, .05, .03, "nd", "nd", .06, "nd", "nd", "nd")
+metabolite <- c("nd", "nd", "nd", 0.03, 0.06, 0.10, 0.11, 0.10, 0.09, 0.05, 0.03, "nd", "nd")
+
+test_that("Simple residue series processed as intended", {
+
+ expect_equal(set_nd(parent_1, 0.02),
+ c(.12, .09, .05, .03, .01, rep(NA, 5)))
+
+ expect_equal(set_nd(parent_2, 0.02, loq = 0.05),
+ c(.12, .09, .05, .03, .01, .01, .03, .01, NA, NA))
+
+ expect_equal(set_nd(metabolite, 0.02, loq = 0.05),
+ c(NA, NA, .01, .03, .06, .1, .11, .1, .09, .05, .03, .01, NA))
+
+})
+
+test_that("Simple residue series are processed as in the FOCUS guidance", {
+
+ # Parent 1
+ expect_error(set_nd_focus(parent_1, 0.02),
+ "You need to specify an loq")
+ expect_equal(set_nd_focus(parent_1, 0.02, 0.05),
+ c(.12, .09, .05, .03, .01, rep(NA, 5)))
+
+ # Parent 2
+ expect_equal(set_nd_focus(parent_2, 0.02, loq = 0.05),
+ c(.12, .09, .05, .03, .01, rep(NA, 5)))
+
+ # Parent 3
+ expect_equal(set_nd_focus(parent_3, 0.02, loq = 0.05),
+ c(.12, .09, .05, .03, .01, .01, .06, .01, NA, NA))
+
+ # Metabolite
+ expect_equal(set_nd_focus(metabolite, 0.02, loq = 0.05),
+ c(0, NA, .01, .03, .06, .1, .11, .1, .09, .05, .03, .01, NA))
+
+})

Contact - Imprint