PageSourceSearch

https://www.rpact.org/

html rpact.org collected 2026-09-26 00:38:36 UTC 59,361 bytes, 1,044 lines download raw bytes

1<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
3
4<meta charset="utf-8">
5<meta name="generator" content="quarto-1.10.18">
6
7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
8
9<meta name="author" content="Gernot Wassmer  Friedrich Pahlke ">
10
11<title>rpact: Confirmatory Adaptive Clinical Trial Design, Simulation, and Analysis – rpact</title>
12<style>
13/* Default styles provided by pandoc.
14** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
15*/
16span.smallcaps{font-variant: small-caps;}
17div.columns{display: flex; gap: 1.5em;}
18div.column{flex: auto;}
19@media screen {
20div.columns{gap: min(4vw, 1.5em);}
21div.column{overflow-x: auto;}
22}
23div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
24ul.task-list{list-style: none;}
25ul.task-list li input[type="checkbox"] {
26  width: 0.8em;
27  margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
28  vertical-align: middle;
29}
30/* CSS for syntax highlighting */
31html { -webkit-text-size-adjust: 100%; }
32pre > code.sourceCode { white-space: pre; position: relative; }
33pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
34pre > code.sourceCode > span:empty { height: 1.2em; }
35.sourceCode { overflow: visible; }
36code.sourceCode > span { color: inherit; text-decoration: inherit; }
37div.sourceCode { margin: 1em 0; }
38pre.sourceCode { margin: 0; }
39@media screen {
40div.sourceCode { overflow: auto; }
41}
42@media print {
43pre > code.sourceCode { white-space: pre-wrap; }
44pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
45}
46pre.numberSource code
47  { counter-reset: source-line 0; }
48pre.numberSource code > span
49  { position: relative; left: -4em; counter-increment: source-line; }
50pre.numberSource code > span > a:first-child::before
51  { content: counter(source-line);
52    position: relative; left: -1em; text-align: right; vertical-align: baseline;
53    border: none; display: inline-block;
54    -webkit-touch-callout: none; -webkit-user-select: none;
55    -khtml-user-select: none; -moz-user-select: none;
56    -ms-user-select: none; user-select: none;
57    padding: 0 4px; width: 4em;
58  }
59pre.numberSource { margin-left: 3em;  padding-left: 4px; }
60div.sourceCode
61  {   }
62@media screen {
63pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
64}
65</style>
66
67
68<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 68
68
69<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 69
69
70<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 70
70
71<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 71
71
72<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 72
72
73<script src="site_libs/quarto-search/quarto-search.js"></script>
73
74<meta name="quarto:offset" content="./">
75<link href="./favicon.ico" rel="icon">
76<script src="site_libs/cookie-consent/cookie-consent.js"></script>
76
77<link href="site_libs/cookie-consent/cookie-consent.css" rel="stylesheet">
78<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 78
78
79<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 79
79
80<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 80
80
81<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 81
81
82<script src="site_libs/quarto-html/anchor.min.js"></script>
82
83<link href="site_libs/quarto-html/tippy.css" rel="stylesheet">
84<link href="site_libs/quarto-html/quarto-syntax-highlighting-64a204ab8560d761af7679ceaba22944.css" rel="stylesheet" id="quarto-text-highlighting-styles">
85<script src="site_libs/bootstrap/bootstrap.min.js"></script>
85
86<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
87<link href="site_libs/bootstrap/bootstrap-adc99c25116bd31ee0d3ea5233b9d9ac.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
88<script id="quarto-search-options" type="application/json">{
89  "location": "navbar",
90  "copy-button": false,
91  "collapse-after": 3,
92  "panel-placement": "end",
93  "type": "overlay",
94  "limit": 50,
95  "keyboard-shortcut": [
96    "f",
97    "/",
98    "s"
99  ],
100  "show-item-context": false,
101  "language": {
102    "search-no-results-text": "No results",
103    "search-matching-documents-text": "matching documents",
104    "search-copy-link-title": "Copy link to search",
105    "search-hide-matches-text": "Hide additional matches",
106    "search-more-match-text": "more match in this document",
107    "search-more-matches-text": "more matches in this document",
108    "search-clear-button-title": "Clear",
109    "search-text-placeholder": "",
110    "search-detached-cancel-button-title": "Cancel",
111    "search-submit-button-title": "Submit",
112    "search-label": "Search"
113  }
114}</script>
vendor: 67 bytes, lines 114-115
114
115<script async="" src="https://www.googletagmanager.com/gtag/js?id=
115G-QSV5SPJQDV
vendor: 13 bytes, lines 115-116
115"></script>
116
117<script type="text/plain" cookie-consent="tracking">
118
vendor: 127 bytes, lines 119-122
119window.dataLayer = window.dataLayer || [];
120function gtag(){dataLayer.push(arguments);}
121gtag('js', new Date());
122gtag('config', '
122G-QSV5SPJQDV
vendor: 29 bytes, line 122
122', { 'anonymize_ip': true});
123</script>
123
124
125<script type="text/javascript" charset="UTF-8">
126document.addEventListener('DOMContentLoaded', function () {
127cookieconsent.run({
128  "notice_banner_type":"headline",
129  "consent_type":"express",
130  "palette":"dark",
131  "language":"en",
132  "page_load_consent_levels":["strictly-necessary"],
133  "notice_banner_reject_button_hide":false,
134  "preferences_center_close_button_hide":false,
135  "website_name":"",
136"website_privacy_policy_url":"https://www.rpact.com/privacy_policy"
137  ,
138"language":"en"
139  });
140});
141</script>
141 
142  
143
144
145<link rel="stylesheet" href="styles.css">
146<meta property="og:title" content="rpact: Confirmatory Adaptive Clinical Trial Design, Simulation, and Analysis – rpact">
147<meta property="og:description" content="A validated, open source, free-of-charge R software package">
148<meta property="og:image" content="https://www.rpact.org/figures/rpact_logo.png">
149<meta property="og:site_name" content="rpact">
150<meta property="og:locale" content="en_en">
151<meta property="og:image:height" content="800">
152<meta property="og:image:width" content="800">
153</head>
154
155<body class="nav-fixed quarto-light">
156
157<div id="quarto-search-results"></div>
158  <header id="quarto-header" class="headroom fixed-top">
159    <nav class="navbar navbar-expand-lg " data-bs-theme="dark">
160      <div class="navbar-container container-fluid">
161      <div class="navbar-brand-container mx-auto">
162    <a href="./index.html" class="navbar-brand navbar-brand-logo">
163    <img src="./figures/rpact_logo_100.png" alt="" class="navbar-logo light-content">
164    <img src="./figures/rpact_logo_100.png" alt="" class="navbar-logo dark-content">
165    </a>
166    <a class="navbar-brand" href="./index.html">
167    <span class="navbar-title">rpact</span>
168    </a>
169  </div>
170            <div id="quarto-search" class="" title="Search"></div>
171          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
172  <span class="navbar-toggler-icon"></span>
173</button>
174          <div class="collapse navbar-collapse" id="navbarCollapse">
175            <ul class="navbar-nav navbar-nav-scroll me-auto">
176  <li class="nav-item">
177    <a class="nav-link active" href="./index.html" aria-current="page"> <i class="bi bi-house-fill" role="img">
178</i> 
179<span class="menu-text">Home</span></a>
180  </li>  
181  <li class="nav-item">
182    <a class="nav-link" href="./vignettes/index.html"> <i class="bi bi-mortarboard-fill" role="img">
183</i> 
184<span class="menu-text">Vignettes</span></a>
185  </li>  
186  <li class="nav-item">
187    <a class="nav-link" href="https://www.rpact.com/user"> <i class="bi bi-file-person-fill" role="img">
188</i> 
189<span class="menu-text">My Account</span></a>
190  </li>  
191</ul>
192            <ul class="navbar-nav navbar-nav-scroll ms-auto">
193  <li class="nav-item compact">
194    <a class="nav-link" href="https://www.linkedin.com/company/rpact/"> <i class="bi bi-linkedin" role="img" aria-label="LinkedIn">
195</i> 
196<span class="menu-text"></span></a>
197  </li>  
198  <li class="nav-item compact">
199    <a class="nav-link" href="https://github.com/rpact-com"> <i class="bi bi-github" role="img" aria-label="GitHub">
200</i> 
201<span class="menu-text"></span></a>
202  </li>  
203  <li class="nav-item compact">
204    <a class="nav-link" href="https://www.rpact.org/vignettes/index.xml"> <i class="bi bi-rss" role="img" aria-label="RSS Feed">
205</i> 
206<span class="menu-text"></span></a>
207  </li>  
208  <li class="nav-item compact">
209    <a class="nav-link" href="https://www.rpact.com/contact"> <i class="bi bi-envelope" role="img" aria-label="Contact">
210</i> 
211<span class="menu-text"></span></a>
212  </li>  
213</ul>
214          </div> <!-- /navcollapse -->
215            <div class="quarto-navbar-tools">
216</div>
217      </div> <!-- /container-fluid -->
218    </nav>
219</header>
220<!-- content -->
221<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
222<!-- sidebar -->
223<!-- margin-sidebar -->
224    <div id="quarto-margin-sidebar" class="sidebar margin-sidebar"><div class="quarto-margin-header"><div class="margin-header-item">
225<div class="site-context site-context--package" aria-labelledby="site-context-title">
226<a class="site-context__switch" href="https://www.rpact.com" aria-label="Visit rpact.com for RPACT products and professional services"> <span> <span class="site-context__question">Looking for the company?</span> <span class="site-context__destination">Visit rpact.com</span> </span> <svg viewbox="0 0 24 24" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"></path></svg> </a>
227<div class="site-context__main">
228<div class="site-context__copy">
229<p class="site-context__eyebrow">
230You’re on rpact.org
231</p>
232<p class="site-context__title" id="site-context-title">
233The rpact R package
234</p>
235<p class="site-context__description">
236Installation guidance, reference documentation, and practical vignettes for planning, simulating, and analyzing clinical trials.
237</p>
238</div>
239</div>
240</div>
241</div></div>
242        <nav id="TOC" role="doc-toc" class="toc-active">
243    <h2 id="toc-title">On this page</h2>
244   
245  <ul>
246  <li><a href="#functional-range" id="toc-functional-range" class="nav-link active" data-scroll-target="#functional-range">Functional Range</a></li>
247  <li><a href="#installation" id="toc-installation" class="nav-link" data-scroll-target="#installation">Installation</a>
248  <ul class="collapse">
249  <li><a href="#installation-from-cran" id="toc-installation-from-cran" class="nav-link" data-scroll-target="#installation-from-cran">Installation from CRAN</a></li>
250  <li><a href="#installation-of-the-developer-version" id="toc-installation-of-the-developer-version" class="nav-link" data-scroll-target="#installation-of-the-developer-version">Installation of the Developer Version</a></li>
251  </ul></li>
252  <li><a href="#learn-to-use-rpact" id="toc-learn-to-use-rpact" class="nav-link" data-scroll-target="#learn-to-use-rpact">Learn To Use rpact</a>
253  <ul class="collapse">
254  <li><a href="#vignettes" id="toc-vignettes" class="nav-link" data-scroll-target="#vignettes">Vignettes</a></li>
255  <li><a href="#online-help" id="toc-online-help" class="nav-link" data-scroll-target="#online-help">Online Help</a></li>
256  <li><a href="#inline-help" id="toc-inline-help" class="nav-link" data-scroll-target="#inline-help">Inline Help</a></li>
257  <li><a href="#getting-started" id="toc-getting-started" class="nav-link" data-scroll-target="#getting-started">Getting Started</a></li>
258  </ul></li>
259  <li><a href="#user-concept" id="toc-user-concept" class="nav-link" data-scroll-target="#user-concept">User Concept</a>
260  <ul class="collapse">
261  <li><a href="#workflow" id="toc-workflow" class="nav-link" data-scroll-target="#workflow">Workflow</a></li>
262  <li><a href="#focus-on-usability" id="toc-focus-on-usability" class="nav-link" data-scroll-target="#focus-on-usability">Focus on Usability</a></li>
263  <li><a href="#r-generics" id="toc-r-generics" class="nav-link" data-scroll-target="#r-generics">R generics</a></li>
264  <li><a href="#utilities" id="toc-utilities" class="nav-link" data-scroll-target="#utilities">Utilities</a></li>
265  </ul></li>
266  <li><a href="#rpact-connect" id="toc-rpact-connect" class="nav-link" data-scroll-target="#rpact-connect">RPACT Connect</a></li>
267  <li><a href="#validation" id="toc-validation" class="nav-link" data-scroll-target="#validation">Validation</a></li>
268  <li><a href="#about" id="toc-about" class="nav-link" data-scroll-target="#about">About</a></li>
269  <li><a href="#contact" id="toc-contact" class="nav-link" data-scroll-target="#contact">Contact</a></li>
270  <li><a href="#bugs-and-issues" id="toc-bugs-and-issues" class="nav-link" data-scroll-target="#bugs-and-issues">Bugs and Issues</a></li>
271  <li><a href="#recommended-vignette" id="toc-recommended-vignette" class="nav-link" data-scroll-target="#recommended-vignette">Recommended Vignette</a></li>
272  </ul>
273</nav>
274    </div>
275<!-- main -->
276<main class="content" id="quarto-document-content">
277
278<header id="title-block-header" class="quarto-title-block default">
279<div class="quarto-title">
280<h1 class="title">rpact: Confirmatory Adaptive Clinical Trial Design, Simulation, and Analysis</h1>
281<p class="subtitle lead">A validated, open source, free-of-charge R software package</p>
282</div>
283
284
285
286<div class="quarto-title-meta">
287
288    <div>
289    <div class="quarto-title-meta-heading">Author</div>
290    <div class="quarto-title-meta-contents">
291             <p><span class="author-row"><a href="https://www.linkedin.com/in/gernot-wassmer-10321561" title="Visit Gernot Wassmer's LinkedIn Profile">Gernot Wassmer</a> <a href="https://orcid.org/0000-0001-9397-1794" title="Visit Gernot Wassmer's ORCID"><svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewbox="0 0 512 512"><path fill="#a6ce39" d="M294.8 188.2h-45.9V342h47.5c67.6 0 83.1-51.3 83.1-76.9 0-41.6-26.5-76.9-84.7-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.8 360.8h-29.8v-207.5h29.8zm-14.9-231.1a19.6 19.6 0 1 1 19.6-19.6 19.6 19.6 0 0 1 -19.6 19.6zM300 369h-81V161.3h80.6c
29176.7 0 110.4 54.8 110.4 103.9C410 318.4 368.4 369 300 369z"></path></svg></a></span> <span class="author-row"><a href="https://www.linkedin.com/in/pahlke/" title="Visit Friedrich Pahlke's LinkedIn Profile">Friedrich Pahlke</a> <a href="https://orcid.org/0000-0003-2105-2582" title="Visit Friedrich Pahlke's ORCID"><svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewbox="0 0 512 512"><path fill="#a6ce39" d="M294.8 188.2h-45.9V342h47.5c67.6 0 83.1-51.3 83.1-76.9 0-41.6-26.5-76.9-84.7-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.8 360.8h-29.8v-207.5h29.8zm-14.9-231.1a19.6 19.6 0 1 1 19.6-19.6 19.6 19.6 0 0 1 -19.6 19.6zM300 369h-81V161.3h80.6c76.7 0 110.4 54.8 110.4 103.9C410 318.4 368.4 369 300 369z"></path></svg></a></span> </p>
292          </div>
293  </div>
294    
295  
296    
297  </div>
298  
299
300
301</header>
302
303
304<p><!-- badges: start --> <a href="https://cran.r-project.org/package=rpact"><img src="https://www.r-pkg.org/badges/version/rpact" class="img-fluid"></a> <a href="https://github.com/rpact-com/rpact/actions/workflows/R-CMD-check.yaml"><img src="https://github.com/rpact-com/rpact/actions/workflows/R-CMD-check.yaml/badge.svg" class="img-fluid" alt="R-CMD-check"></a> <a href="https://CRAN.R-project.org/package=rpact"><img src="https://cranlogs.r-pkg.org/badges/grand-total/rpact?color=blue" class="img-fluid" alt="Total downloads"></a> <a href="https://CRAN.R-project.org/package=rpact"><img src="https://cranlogs.r-pkg.org/badges/rpact?color=blue" class="img-fluid" alt="Monthly downloads"></a> <a href="https://lifecycle.r-lib.org/articles/stages.html#stable"><img src="https://img.shields.io/badge/lifecycle-stable-brightgreen.svg" class="img-fluid" alt="Lifecycle: stable"></a> <a href="https://www.gnu.org/licenses/lgpl-3.0"><img src="https://img.shields.io/badge/License-LGPL_v3-blue.svg" class="img-fluid" alt="License: LGPL v3"></a> <a href="https://app.codecov.io/gh/rpact-com/rpact?branch=main"><img src="https://codecov.io/gh/rpact-com/rpact/branch/main/graph/badge.svg" class="img-fluid" alt="Codecov test coverage"></a> <a href="https://doi.org/10.1007/978-3-319-32562-0"><img src="https://img.shields.io/badge/DOI-10.1007/978--3--319--32562--0-yellow.svg?logo=doi" class="img-fluid"></a> <a href="https://rpact-cloud.share.connect.posit.cloud/"><img src="https://img.shields.io/badge/RPACT-Cloud-blue.svg?logo=r" class="img-fluid"></a> <a href="https://rpact.shinyapps.io/connect"><img src="https://img.shields.io/badge/RPACT-Connect-669999.svg?labelColor=336699" class="img-fluid"></a> <!-- badges: end --></p>
305<div class="infobox">
306<p><a href="https://cran.r-project.org/package=rpact"><img src="figures/rpact_logo.png" align="right" height="138"></a> <svg aria-hidden="true" role="img" viewbox="0 0 512 512" style="height:20px;width:20px;vertical-align:-0.125em;margin-left:auto;margin-right:0.2em;font-size:inherit;fill:steelblue;overflow:visible;position:relative;"><title>Notice</title><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"></path></svg> rpact is a comprehensive validated, open source, free-of-charge R software package for:</p>
307<ul>
308<li>Clinical trial planning</li>
309<li>Clinical trial design evaluation and simulation</li>
310<li>Clinical trial data analysis</li>
311</ul>
312</div>
313<section id="functional-range" class="level2">
314<h2 class="anchored" data-anchor-id="functional-range">Functional Range</h2>
315<ul>
316<li>Fixed sample design and designs with interim analysis stages</li>
317<li>Sample size and power calculation for
318<ul>
319<li>means (continuous endpoint)</li>
320<li>rates (binary endpoint)</li>
321<li>survival trials with flexible recruitment and survival time options</li>
322<li>count data</li>
323</ul></li>
324<li>Simulation tool for means, rates, survival data, and count data
325<ul>
326<li>Assessment of adaptive sample size/event number recalculations based on conditional power</li>
327<li>Assessment of treatment selection strategies in multi-arm trials</li>
328</ul></li>
329<li>Adaptive analysis of means, rates, and survival data</li>
330<li>Adaptive designs and analysis for multi-arm trials</li>
331<li>Adaptive analysis and simulation tools for enrichment design testing means, rates, and hazard ratios</li>
332<li>
332Automatic boundary recalculations during the trial for analysis with alpha spending approach, including under- and over-running</li>
333</ul>
334</section>
335<section id="installation" class="level2">
336<h2 class="anchored" data-anchor-id="installation">Installation</h2>
337<section id="installation-from-cran" class="level3">
338<h3 class="anchored" data-anchor-id="installation-from-cran">Installation from CRAN</h3>
339<div class="cell">
340<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># The easiest way to get rpact is to install it from cran:</span></span>
341<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">install.packages</span>(<span class="st">"rpact"</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
342</div>
343</section>
344<section id="installation-of-the-developer-version" class="level3">
345<h3 class="anchored" data-anchor-id="installation-of-the-developer-version">Installation of the Developer Version</h3>
346<p>To use a feature from the development version, you can install the development version of rpact from <a href="https://github.com/rpact-com/rpact">GitHub</a>.</p>
347<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co"># install.packages("pak")</span></span>
348<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>pak<span class="sc">::</span><span class="fu">pak</span>(<span class="st">"rpact-com/rpact"</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
349</section>
350</section>
351<section id="learn-to-use-rpact" class="level2">
352<h2 class="anchored" data-anchor-id="learn-to-use-rpact">Learn To Use rpact</h2>
353<div class="infobox">
354<p><a href="https://rpact.cloud" target="_blank"><img src="figures/rpact_cloud_logo.png" align="right" height="138"></a></p>
355<p><svg aria-hidden="true" role="img" viewbox="0 0 512 512" style="height:20px;width:20px;vertical-align:-0.125em;margin-left:auto;margin-right:0.2em;font-size:inherit;fill:steelblue;overflow:visible;position:relative;"><title>Notice</title><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"></path></svg> We recommend three ways to learn how to use <a href="https://cran.r-project.org/package=rpact">rpact</a>:</p>
356<ol type="1">
357<li>Use the Shiny app “RPACT Cloud”: <a href="https://rpact.cloud">rpact.cloud</a></li>
358<li>Use the <a href="#vignettes">rpact vignettes</a></li>
359<li>Book a training: <a href="https://www.rpact.com/services#learning-and-training">www.rpact.com/services</a></li>
360</ol>
361</div>
362<section id="vignettes" class="level3">
363<h3 class="anchored" data-anchor-id="vignettes">Vignettes</h3>
364<ul>
365<li>The open access vignettes are hosted at <a href="./vignettes/index.html">rpact.org/vignettes</a></li>
366<li>The exclusive vignettes are hosted at <a href="https://connect.rpact.com">connect.rpact.com</a></li>
367</ul>
368</section>
369<section id="online-help" class="level3">
370<h3 class="anchored" data-anchor-id="online-help">Online Help</h3>
371<p>The online documentation (help files) can be opened here: <a href="https://docs.rpact.org/reference/">docs.rpact.org/reference/</a></p>
372<p>Additionally there are two different pdf versions of the manual available:</p>
373<ul>
374<li><a href="./download/manual/rpact_v4_4.0_quick_start_guide.pdf">rpact_v4_4.0_quick_start_guide.pdf</a> (recommended for beginners)</li>
375<li><a href="./download/manual/rpact_v4_4.0_manual.pdf">rpact_v4_4.0_manual.pdf</a></li>
376</ul>
377</section>
378<section id="inline-help" class="level3">
379<h3 class="anchored" data-anchor-id="inline-help">Inline Help</h3>
380<div class="cell">
381<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="co"># display the manual of the package</span></span>
382<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="fu">help</span>(<span class="at">package =</span> <span class="st">"rpact"</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
383</div>
384</section>
385<section id="getting-started" class="level3">
386<h3 class="anchored" data-anchor-id="getting-started">Getting Started</h3>
387<div class="cell">
388<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(rpact)</span>
389<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span>
390<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="co"># display the manual of the package</span></span>
391<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="fu">help</span>(<span class="at">package =</span> <span class="st">"rpact"</span>)</span>
392<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a></span>
393<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a><span class="co"># create an inverse normal design with default parameters</span></span>
394<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a>design <span class="ot">&lt;-</span> <span class="fu">getDesignInverseNormal</span>()</span>
395<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a></span>
396<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a><span class="co"># take a look at the design and its default values</span></span>
397<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a>design</span>
398<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a></span>
399<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a><span class="co"># create a summary ouput of the design</span></span>
400<span id="cb4-13"><a href="#cb4-13" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span> </span>
401<span id="cb4-14"><a href="#cb4-14" aria-hidden="true" tabindex="-1"></a>    <span class="fu">summary</span>()</span>
402<span id="cb4-15"><a href="#cb4-15" aria-hidden="true" tabindex="-1"></a></span>
403<span id="cb4-16"><a href="#cb4-16" aria-hidden="true" tabindex="-1"></a><span class="co"># display the design characteristics</span></span>
404<span id="cb4-17"><a href="#cb4-17" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span></span>
405<span id="cb4-18"><a href="#cb4-18" aria-hidden="true" tabindex="-1"></a>    <span class="fu">getDesignCharacteristics</span>()</span>
406<span id="cb4-19"><a href="#cb4-19" aria-hidden="true" tabindex="-1"></a></span>
407<span id="cb4-20"><a href="#cb4-20" aria-hidden="true" tabindex="-1"></a><span class="co"># plot the design with default type 1 (Boundary Plot)</span></span>
408<span id="cb4-21"><a href="#cb4-21" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span></span>
409<span id="cb4-22"><a href="#cb4-22" aria-hidden="true" tabindex="-1"></a>    <span class="fu">plot</span>()</span>
410<span id="cb4-23"><a href="#cb4-23" aria-hidden="true" tabindex="-1"></a></span>
411<span id="cb4-24"><a href="#cb4-24" aria-hidden="true" tabindex="-1"></a><span class="co"># create an 'Average Sample Size and Power / Early Stop' plot</span></span>
412<span id="cb4-25"><a href="#cb4-25" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span></span>
413<span id="cb4-26"><a href="#cb4-26" aria-hidden="true" tabindex="-1"></a>    <span class="fu">plot</span>(<span class="at">type =</span> <span class="dv">6</span>, <span class="at">nMax =</span> <span class="dv">12</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
414</div>
415<section id="working-with-datasets" class="level4">
416<h4 class="anchored" data-anchor-id="working-with-datasets">Working with datasets</h4>
417<div class="cell">
418<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co"># create a group sequential design</span></span>
419<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>design <span class="ot">&lt;-</span> <span class="fu">getDesignGroupSequential</span>(</span>
420<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>    <span class="at">kMax =</span> <span class="dv">4</span>, </span>
421<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>    <span class="at">alpha =</span> <span class="fl">0.025</span>,</span>
422<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>    <span class="at">informationRates =</span> <span class="fu">c</span>(<span class="fl">0.2</span>, <span class="fl">0.5</span>, <span class="fl">0.8</span>, <span class="dv">1</span>),</span>
423<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a>    <span class="at">futilityBounds =</span> <span class="fu">rep</span>(<span class="fl">0.5244</span>, <span class="dv">4</span> <span class="sc">-</span> <span class="dv">1</span>),</span>
424<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a>    <span class="at">typeOfDesign =</span> <span class="st">
424"WT"</span>, </span>
425<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a>    <span class="at">deltaWT =</span> <span class="fl">0.45</span></span>
426<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a>)</span>
427<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a></span>
428<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a><span class="co"># take a look at the design</span></span>
429<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a>design</span>
430<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a></span>
431<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a><span class="co"># create a dataset of means</span></span>
432<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">getDataset</span>(</span>
433<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a>    <span class="at">n1     =</span> <span class="fu">c</span>( <span class="dv">22</span>,  <span class="dv">11</span>, <span class="dv">22</span>,  <span class="dv">11</span>),</span>
434<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a>    <span class="at">n2     =</span> <span class="fu">c</span>( <span class="dv">22</span>,  <span class="dv">13</span>, <span class="dv">22</span>,  <span class="dv">13</span>),</span>
435<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a>    <span class="at">means1 =</span> <span class="fu">c</span>(  <span class="dv">1</span>, <span class="fl">1.1</span>,  <span class="dv">1</span>,   <span class="dv">1</span>),</span>
436<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a>    <span class="at">means2 =</span> <span class="fu">c</span>(<span class="fl">1.4</span>, <span class="fl">1.5</span>,  <span class="dv">3</span>, <span class="fl">2.5</span>),</span>
437<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a>    <span class="at">stDev1 =</span> <span class="fu">c</span>(  <span class="dv">1</span>,   <span class="dv">2</span>,  <span class="dv">2</span>, <span class="fl">1.3</span>),</span>
438<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a>    <span class="at">stDev2 =</span> <span class="fu">c</span>(  <span class="dv">1</span>,   <span class="dv">2</span>,  <span class="dv">2</span>, <span class="fl">1.3</span>)</span>
439<span id="cb5-22"><a href="#cb5-22" aria-hidden="true" tabindex="-1"></a>)</span>
440<span id="cb5-23"><a href="#cb5-23" aria-hidden="true" tabindex="-1"></a></span>
441<span id="cb5-24"><a href="#cb5-24" aria-hidden="true" tabindex="-1"></a><span class="co"># display the stage results</span></span>
442<span id="cb5-25"><a href="#cb5-25" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span></span>
443<span id="cb5-26"><a href="#cb5-26" aria-hidden="true" tabindex="-1"></a>    <span class="fu">getStageResults</span>(<span class="at">dataInput =</span> data, <span class="at">stage =</span> <span class="dv">3</span>)</span>
444<span id="cb5-27"><a href="#cb5-27" aria-hidden="true" tabindex="-1"></a></span>
445<span id="cb5-28"><a href="#cb5-28" aria-hidden="true" tabindex="-1"></a><span class="co"># display the analysis results</span></span>
446<span id="cb5-29"><a href="#cb5-29" aria-hidden="true" tabindex="-1"></a>design <span class="sc">|&gt;</span></span>
447<span id="cb5-30"><a href="#cb5-30" aria-hidden="true" tabindex="-1"></a>    <span class="fu">getAnalysisResults</span>(</span>
448<span id="cb5-31"><a href="#cb5-31" aria-hidden="true" tabindex="-1"></a>        <span class="at">dataInput =</span> data, </span>
449<span id="cb5-32"><a href="#cb5-32" aria-hidden="true" tabindex="-1"></a>        <span class="at">equalVariances =</span> <span class="cn">TRUE</span>,</span>
450<span id="cb5-33"><a href="#cb5-33" aria-hidden="true" tabindex="-1"></a>        <span class="at">stage =</span> <span class="dv">2</span>, </span>
451<span id="cb5-34"><a href="#cb5-34" aria-hidden="true" tabindex="-1"></a>        <span class="at">nPlanned =</span> <span class="fu">c</span>(<span class="dv">10</span>, <span class="dv">10</span>),</span>
452<span id="cb5-35"><a href="#cb5-35" aria-hidden="true" tabindex="-1"></a>
452        <span class="at">thetaH0 =</span> <span class="dv">0</span>, </span>
453<span id="cb5-36"><a href="#cb5-36" aria-hidden="true" tabindex="-1"></a>        <span class="at">thetaH1 =</span> <span class="fl">1.3</span>, </span>
454<span id="cb5-37"><a href="#cb5-37" aria-hidden="true" tabindex="-1"></a>        <span class="at">allocationRatioPlanned =</span> <span class="dv">2</span></span>
455<span id="cb5-38"><a href="#cb5-38" aria-hidden="true" tabindex="-1"></a>    )</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
456</div>
457</section>
458</section>
459</section>
460<section id="user-concept" class="level2">
461<h2 class="anchored" data-anchor-id="user-concept">User Concept</h2>
462<section id="workflow" class="level3">
463<h3 class="anchored" data-anchor-id="workflow">Workflow</h3>
464<ul>
465<li>Everything is starting with a design, e.g.: <code>design &lt;- getDesignGroupSequential()</code></li>
466<li>Find the optimal design parameters with help of <a href="https://cran.r-project.org/package=rpact">rpact</a> comparison tools: <code>getDesignSet</code></li>
467<li>Calculate the required sample size, e.g.: <code>getSampleSizeMeans()</code>, <code>getPowerMeans()</code></li>
468<li>Simulate specific characteristics of an adaptive design, e.g.: <code>getSimulationMeans()</code></li>
469<li>Collect your data, import it into R and create a dataset: <code>data &lt;- getDataset()</code></li>
470<li>Analyze your data: <code>getAnalysisResults(design, data)</code></li>
471</ul>
472</section>
473<section id="focus-on-usability" class="level3">
474<h3 class="anchored" data-anchor-id="focus-on-usability">Focus on Usability</h3>
475<p>The most important <a href="https://cran.r-project.org/package=rpact">rpact</a> functions have intuitive names:</p>
476<ul>
477<li><code>getDesign</code>[<code>GroupSequential</code>/<code>InverseNormal</code>/<code>Fisher</code>]<code>()</code></li>
478<li><a href="https://docs.rpact.org/reference/getDesignCharacteristics.html"><code>getDesignCharacteristics()</code></a></li>
479<li><code>getSampleSize</code>[<code>Means</code>/<code>Rates</code>/<code>Survival</code>/<code>Counts</code>]<code>()</code></li>
480<li><code>getPower</code>[<code>Means</code>/<code>Rates</code>/<code>Survival</code>/<code>Counts</code>]<code>()</code></li>
481<li><code>getSimulation</code>[<code>MultiArm</code>/<code>Enrichment</code>][<code>Means</code>/<code>Rates</code>/<code>Survival</code>/<code>Counts</code>]<code>()</code></li>
482<li><a href="https://docs.rpact.org/reference/getDataset.html"><code>getDataset()</code></a></li>
483<li><a href="https://docs.rpact.org/reference/getAnalysisResults.html"><code>getAnalysisResults()</code></a></li>
484<li><a href="https://docs.rpact.org/reference/getStageResults.html"><code>getStageResults()</code></a></li>
485</ul>
486<p><a href="https://posit.co/downloads/">RStudio</a> / <a href="https://posit.co/products/ide/positron/">Positron</a> / <a href="https://code.visualstudio.com/">VS Code</a> / <a href="https://www.eclipse.org">Eclipse</a>: auto code completion makes it easy to use these functions.</p>
487</section>
488<section id="r-generics" class="level3">
489<h3 class="anchored" data-anchor-id="r-generics">R generics</h3>
490<p>In general, everything runs with the R standard functions which are always present in R: so-called R generics, e.g., <code>print</code>, <code>summary</code>, <code>plot</code>, <code>as.data.frame</code>, <code>names</code>, <code>length</code></p>
491</section>
492<section id="utilities" class="level3">
493<h3 class="anchored" data-anchor-id="utilities">Utilities</h3>
494<p>Several utility functions are available, e.g.</p>
495<ul>
496<li><a href="https://docs.rpact.org/reference/getAccrualTime.html"><code>getAccrualTime()</code></a></li>
497<li><a href="https://docs.rpact.org/reference/getPiecewiseSurvivalTime.html"><code>getPiecewiseSurvivalTime()</code></a></li>
498<li><a href="https://docs.rpact.org/reference/getNumberOfSubjects.html"><code>getNumberOfSubjects()</code></a></li>
499<li><a href="https://docs.rpact.org/reference/getEventProbabilities.html"><code>getEventProbabilities()</code></a></li>
500<li><a href="https://docs.rpact.org/reference/utilitiesForPiecewiseExponentialDistribution.html"><code>getPiecewiseExponentialDistribution()</code></a></li>
501<li>
501survival helper functions for conversion of <code>pi</code>, <code>lambda</code> and <code>median</code>, e.g., <a href="https://docs.rpact.org/reference/utilitiesForSurvivalTrials.html"><code>getLambdaByMedian()</code></a></li>
502<li><a href="https://docs.rpact.org/reference/testPackage.html"><code>testPackage()</code></a>: installation qualification on a client computer or company server (see <a href="./vignettes/utilities/rpact_installation_qualification/index.html">Installation Qualification of rpact</a>)</li>
503</ul>
504<p><a href="https://connect.rpact.com" target="_blank"><img src="figures/rpact_connect_logo.png" align="right" height="138"></a></p>
505</section>
506</section>
507<section id="rpact-connect" class="level2">
508<h2 class="anchored" data-anchor-id="rpact-connect">RPACT Connect</h2>
509<p>Connecting you to insights, downloads, and premium support: <a href="https://connect.rpact.com">connect.rpact.com</a></p>
510</section>
511<section id="validation" class="level2">
512<h2 class="anchored" data-anchor-id="validation">Validation</h2>
513<p>Please <a href="https://www.rpact.com/contact">contact</a> us to learn how to use <a href="https://cran.r-project.org/package=rpact">rpact</a> on FDA/GxP-compliant validated corporate computer systems and how to get a copy of the formal validation documentation that is customized and licensed for exclusive use by your company, e.g., to fulfill regulatory requirements.</p>
514</section>
515<section id="about" class="level2">
516<h2 class="anchored" data-anchor-id="about">About</h2>
517<ul>
518<li><strong>rpact</strong> is a comprehensive validated<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a> R package for clinical research which
519<ul>
520<li>enables the design and analysis of confirmatory adaptive group sequential designs</li>
521<li>is a powerful sample size calculator</li>
522<li>is a free of charge open-source software licensed under <a href="https://cran.r-project.org/web/licenses/LGPL-3">LGPL-3</a></li>
523<li>particularly, implements the methods described in the recent monograph by <a href="https://amzn.to/3mUsFr5">Wassmer and Brannath (2016)</a></li>
524</ul></li>
525</ul>
526<blockquote class="blockquote">
527<p>For more information please visit <a href="https://www.rpact.com/products#r-package-rpact">www.rpact.com/products</a></p>
528</blockquote>
529<p><a href="https://www.rpact.com" target="_blank"><img src="figures/logo_300.png" align="right" height="138"></a></p>
530<ul>
531<li><strong>RPACT</strong> is a company which offers
532<ul>
533<li>enterprise software development services</li>
534<li>technical support for the <a href="https://cran.r-project.org/package=rpact">rpact</a> package</li>
535<li>consultancy and user training for clinical research using R</li>
536<li>validated software solutions and R package development for clinical research</li>
537</ul></li>
538</ul>
539<blockquote class="blockquote">
540<p>For more information please visit <a href="https://www.rpact.com/services">www.rpact.com/services</a></p>
541</blockquote>
542</section>
543<section id="contact" class="level2">
544<h2 class="anchored" data-anchor-id="contact">Contact</h2>
545<ul>
546<li>For general requests please send an email to 
546<script type="text/javascript">
547<!--
548h='&#114;&#112;&#x61;&#x63;&#116;&#46;&#x63;&#x6f;&#x6d;';a='&#64;';n='&#x69;&#110;&#102;&#x6f;';e=n+a+h;
549document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'" clas'+'s="em' + 'ail">'+e+'<\/'+'a'+'>');
550// -->
551</script>
551<noscript>info at rpact dot com</noscript></li>
552<li>Please send your support request to 
552<script type="text/javascript">
553<!--
554h='&#114;&#112;&#x61;&#x63;&#116;&#46;&#x63;&#x6f;&#x6d;';a='&#64;';n='&#x73;&#x75;&#112;&#112;&#x6f;&#114;&#116;';e=n+a+h;
555document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'" clas'+'s="em' + 'ail">'+e+'<\/'+'a'+'>');
556// -->
557</script>
557<noscript>support at rpact dot com</noscript></li>
558<li>Or use our contact form at <a href="https://www.rpact.com/contact">www.rpact.com/contact</a></li>
559</ul>
560</section>
561<section id="bugs-and-issues" class="level2">
562<h2 class="anchored" data-anchor-id="bugs-and-issues">Bugs and Issues</h2>
563<p>Please use the github bug report form to submit bug descriptions and issues in a systematic way: <a href="https://github.com/rpact-com/rpact/issues">github.com/rpact-com/rpact/issues</a></p>
564</section>
565<section id="recommended-vignette" class="level2">
566<h2 class="anchored" data-anchor-id="recommended-vignette">Recommended Vignette</h2>
567<p><a href="./vignettes/getting-started/rpact_step-by-step_tutorial">Step-by-Step rpact Tutorial</a></p>
568
569
570</section>
571
572
573<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>
574
575<ol>
576<li id="fn1"><p>The rpact validation documentation is available exclusively for our customers and supporting companies. For more information visit <a href="https://www.rpact.com/services/sla">www.rpact.com/services/sla</a><a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
577</ol>
578</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a></div></div></section></div></main> <!-- /main -->
579<script id="quarto-html-after-body" type="application/javascript">
580  window.document.addEventListener("DOMContentLoaded", function (event) {
581    const icon = "";
582    const anchorJS = new window.AnchorJS();
583    anchorJS.options = {
584      placement: 'right',
585      icon: icon
586    };
587    anchorJS.add('.anchored');
588    const isCodeAnnotation = (el) => {
589      for (const clz of el.classList) {
590        if (clz.startsWith('code-annotation-')) {                     
591          return true;
592        }
593      }
594      return false;
595    }
596    const onCopySuccess = function(e) {
597      // button target
598      const button = e.trigger;
599      // don't keep focus
600      button.blur();
601      // flash "checked"
602      button.classList.add('code-copy-button-checked');
603      var currentTitle = button.getAttribute("title");
604      button.setAttribute("title", "Copied!");
605      let tooltip;
606      if (window.bootstrap) {
607        button.setAttribute("data-bs-toggle", "tooltip");
608        button.setAttribute("data-bs-placement", "left");
609        button.setAttribute("data-bs-title", "Copied!");
610        tooltip = new bootstrap.Tooltip(button, 
611          { trigger: "manual", 
612            customClass: "code-copy-button-tooltip",
613            offset: [0, -8]});
614        tooltip.show();    
615      }
616      setTimeout(function() {
617        if (tooltip) {
618          tooltip.hide();
619          button.removeAttribute("data-bs-title");
620          button.removeAttribute("data-bs-toggle");
621          button.removeAttribute("data-bs-placement");
622        }
623        button.setAttribute("title", currentTitle);
624        button.classList.remove('code-copy-button-checked');
625      }, 1000);
626      // clear code selection
627      e.clearSelection();
628    }
629    const getTextToCopy = function(trigger) {
630      const outerScaffold = trigger.parentElement.cloneNode(true);
631      const codeEl = outerScaffold.querySelector('code');
632      for (const childEl of codeEl.children) {
633        if (isCodeAnnotation(childEl)) {
634          childEl.remove();
635        }
636      }
637      return codeEl.innerText;
638    }
639    const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
640      text: getTextToCopy
641    });
642    clipboard.on('success', onCopySuccess);
643    if (window.document.getElementById('quarto-embedded-source-code-modal')) {
644      const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
645        text: getTextToCopy,
646        container: window.document.getElementById('quarto-embedded-source-code-modal')
647      });
648      clipboardModal.on('success', onCopySuccess);
649    }
650      var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
651      var mailtoRegex = new RegExp(/^mailto:/);
652        var filterRegex = new RegExp("https:\/\/www\.rpact\.org");
653      var isInternal = (href) => {
654          return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
655      }
656      // Inspect non-navigation links and adorn them if external
657     var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
658      for (var i=0; i<links.length; i++) {
659        const link = links[i];
660        if (!isInternal(link.href)) {
661          // undo the damage that might have been done by quarto-nav.js in the case of
662          // links that we want to consider external
663          if (link.dataset.originalHref !== undefined) {
664            link.href = link.dataset.originalHref;
665          }
666            // target, if specified
667            link.setAttribute("target", "_blank");
668            if (link.getAttribute("rel") === null) {
669              link.setAttribute("rel", "noopener");
670            }
671        }
672      }
673    function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
674      const config = {
675        allowHTML: true,
676        maxWidth: 500,
677        delay: 100,
678        arrow: false,
679        appendTo: function(el) {
680            return el.parentElement;
681        },
682        interactive: true,
683        interactiveBorder: 10,
684        theme: 'quarto',
685        placement: 'bottom-start',
686      };
687      if (contentFn) {
688        config.content = contentFn;
689      }
690      if (onTriggerFn) {
691        config.onTrigger = onTriggerFn;
692      }
693      if (onUntriggerFn) {
694        config.onUntrigger = onUntriggerFn;
695      }
696      window.tippy(el, config); 
697    }
698    const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
699    for (var i=0; i<noterefs.length; i++) {
700      const ref = noterefs[i];
701      tippyHover(ref, function() {
702        // use id or data attribute instead here
703        let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
704        try { href = new URL(href).hash; } catch {}
705        const id = href.replace(/^#\/?/, "");
706        const note = window.document.getElementById(id);
707        if (note) {
708          return note.innerHTML;
709        } else {
710          return "";
711        }
712      });
713    }
714    const xrefs = window.document.querySelectorAll('a.quarto-xref');
715    const processXRef = (id, note) => {
716      // Strip column container classes
717      const stripColumnClz = (el) => {
718        el.classList.remove("page-full", "page-columns");
719        if (el.children) {
720          for (const child of el.children) {
721            stripColumnClz(child);
722          }
723        }
724      }
725      stripColumnClz(note)
726      if (id === null || id.startsWith('sec-')) {
727        // Special case sections, only their first couple elements
728        const container = document.createElement("div");
729        if (note.children && note.children.length > 2) {
730          container.appendChild(note.children[0].cloneNode(true));
731          for (let i = 1; i < note.children.length; i++) {
732            const child = note.children[i];
733            if (child.tagName === "P" && child.innerText === "") {
734              continue;
735            } else {
736              container.appendChild(child.cloneNode(true));
737              break;
738            }
739          }
740          if (window.Quarto?.typesetMath) {
741            window.Quarto.typesetMath(container);
742          }
743          return container.innerHTML
744        } else {
745          if (window.Quarto?.typesetMath) {
746            window.Quarto.typesetMath(note);
747          }
748          return note.innerHTML;
749        }
750      } else {
751        // Remove any anchor links if they are present
752        const anchorLink = note.querySelector('a.anchorjs-link');
753        if (anchorLink) {
754          anchorLink.remove();
755        }
756        if (window.Quarto?.typesetMath) {
757          window.Quarto.typesetMath(note);
758        }
759        if (note.classList.contains("callout")) {
760          return note.outerHTML;
761        } else {
762          return note.innerHTML;
763        }
764      }
765    }
766    for (var i=0; i<xrefs.length; i++) {
767      const xref = xrefs[i];
768      tippyHover(xref, undefined, function(instance) {
769        instance.disable();
770        let url = xref.getAttribute('href');
771        let hash = undefined; 
772        if (url.startsWith('#')) {
773          hash = url;
774        } else {
775          try { hash = new URL(url).hash; } catch {}
776        }
777        if (hash) {
778          const id = hash.replace(/^#\/?/, "");
779          const note = window.document.getElementById(id);
780          if (note !== null) {
781            try {
782              const html = processXRef(id, note.cloneNode(true));
783              instance.setContent(html);
784            } finally {
785              instance.enable();
786              instance.show();
787            }
788          } else {
789            // See if we can fetch this
790            fetch(url.split('#')[0])
791            .then(res => res.text())
792            .then(html => {
793              const parser = new DOMParser();
794              const htmlDoc = parser.parseFromString(html, "text/html");
795              const note = htmlDoc.getElementById(id);
796              if (note !== null) {
797                const html = processXRef(id, note);
798                instance.setContent(html);
799              } 
800            }).finally(() => {
801              instance.enable();
802              instance.show();
803            });
804          }
805        } else {
806          // See if we can fetch a full url (with no hash to target)
807          // This is a special case and we should probably do some content thinning / targeting
808          fetch(url)
809          .then(res => res.text())
810          .then(html => {
811            const parser = new DOMParser();
812            const htmlDoc = parser.parseFromString(html, "text/html");
813            const note = htmlDoc.querySelector('main.content');
814            if (note !== null) {
815              // This should only happen for chapter cross references
816              // (since there is no id in the URL)
817              // remove the first header
818              if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
819                note.children[0].remove();
820              }
821              const html = processXRef(null, note);
822              instance.setContent(html);
823            } 
824          }).finally(() => {
825            instance.enable();
826            instance.show();
827          });
828        }
829      }, function(instance) {
830      });
831    }
832        let selectedAnnoteEl;
833        const selectorForAnnotation = ( cell, annotation) => {
834          let cellAttr = 'data-code-cell="' + cell + '"';
835          let lineAttr = 'data-code-annotation="' +  annotation + '"';
836          const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
837          return selector;
838        }
839        const selectCodeLines = (annoteEl) => {
840          const doc = window.document;
841          const targetCell = annoteEl.getAttribute("data-target-cell");
842          const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
843          const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
844          const lines = annoteSpan.getAttribute("data-code-lines").split(",");
845          const lineIds = lines.map((line) => {
846            return targetCell + "-" + line;
847          })
848          let top = null;
849          let height = null;
850          let parent = null;
851          if (lineIds.length > 0) {
852              //compute the position of the single el (top and bottom and make a div)
853              const el = window.document.getElementById(lineIds[0]);
854              top = el.offsetTop;
855              height = el.offsetHeight;
856              parent = el.parentElement.parentElement;
857            if (lineIds.length > 1) {
858              const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
859              const bottom = lastEl.offsetTop + lastEl.offsetHeight;
860              height = bottom - top;
861            }
862            if (top !== null && height !== null && parent !== null) {
863              // cook up a div (if necessary) and position it 
864              let div = window.document.getElementById("code-annotation-line-highlight");
865              if (div === null) {
866                div = window.document.createElement("div");
867                div.setAttribute("id", "code-annotation-line-highlight");
868                div.style.position = 'absolute';
869                parent.appendChild(div);
870              }
871              div.style.top = top - 2 + "px";
872              div.style.height = height + 4 + "px";
873              div.style.left = 0;
874              let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
875              if (gutterDiv === null) {
876                gutterDiv = window.document.createElement("div");
877                gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
878                gutterDiv.style.position = 'absolute';
879                const codeCell = window.document.getElementById(targetCell);
880                const gutter = codeCell.querySelector('.code-annotation-gutter');
881                gutter.appendChild(gutterDiv);
882              }
883              gutterDiv.style.top = top - 2 + "px";
884              gutterDiv.style.height = height + 4 + "px";
885            }
886            selectedAnnoteEl = annoteEl;
887          }
888        };
889        const unselectCodeLines = () => {
890          const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
891          elementsIds.forEach((elId) => {
892            const div = window.document.getElementById(elId);
893            if (div) {
894              div.remove();
895            }
896          });
897          selectedAnnoteEl = undefined;
898        };
899          // Handle positioning of the toggle
900      window.addEventListener(
901        "resize",
902        throttle(() => {
903          elRect = undefined;
904          if (selectedAnnoteEl) {
905            selectCodeLines(selectedAnnoteEl);
906          }
907        }, 10)
908      );
909      function throttle(fn, ms) {
910      let throttle = false;
911      let timer;
912        return (...args) => {
913          if(!throttle) { // first call gets through
914              fn.apply(this, args);
915              throttle = true;
916          } else { // all the others get throttled
917              if(timer) clearTimeout(timer); // cancel #2
918              timer = setTimeout(() => {
919                fn.apply(this, args);
920                timer = throttle = false;
921              }, ms);
922          }
923        };
924      }
925        // Attach click handler to the DT
926        const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
927        for (const annoteDlNode of annoteDls) {
928          annoteDlNode.addEventListener('click', (event) => {
929            const clickedEl = event.target;
930            if (clickedEl !== selectedAnnoteEl) {
931              unselectCodeLines();
932              const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
933              if (activeEl) {
934                activeEl.classList.remove('code-annotation-active');
935              }
936              selectCodeLines(clickedEl);
937              clickedEl.classList.add('code-annotation-active');
938            } else {
939              // Unselect the line
940              unselectCodeLines();
941              clickedEl.classList.remove('code-annotation-active');
942            }
943          });
944        }
945    const findCites = (el) => {
946      const parentEl = el.parentElement;
947      if (parentEl) {
948        const cites = parentEl.dataset.cites;
949        if (cites) {
950          return {
951            el,
952            cites: cites.split(' ')
953          };
954        } else {
955          return findCites(el.parentElement)
956        }
957      } else {
958        return undefined;
959      }
960    };
961    var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
962    for (var i=0; i<bibliorefs.length; i++) {
963      const ref = bibliorefs[i];
964      const citeInfo = findCites(ref);
965      if (citeInfo) {
966        tippyHover(citeInfo.el, function() {
967          var popup = window.document.createElement('div');
968          citeInfo.cites.forEach(function(cite) {
969            var citeDiv = window.document.createElement('div');
970            citeDiv.classList.add('hanging-indent');
971            citeDiv.classList.add('csl-entry');
972            var biblioDiv = window.document.getElementById('ref-' + cite);
973            if (biblioDiv) {
974              citeDiv.innerHTML = biblioDiv.innerHTML;
975            }
976            popup.appendChild(citeDiv);
977          });
978          return popup.innerHTML;
979        });
980      }
981    }
982  });
983  </script>
983
984</div> <!-- /content -->
985<footer class="footer">
986  <div class="nav-footer">
987    <div class="nav-footer-left">
988<p>Copyright © 2026 RPACT. All rights reserved.</p>
989</div>   
990    <div class="nav-footer-center">
991      <ul class="footer-items list-unstyled">
992    <li class="nav-item">
993    <a class="nav-link" href="https://www.rpact.com">
994<p>RPACT</p>
995</a>
996  </li>  
997    <li class="nav-item">
998    <a class="nav-link" href="https://www.rpact.com/company">
999<p>About</p>
1000</a>
1001  </li>  
1002    <li class="nav-item">
1003    <a class="nav-link" href="https://www.rpact.com/privacy_policy">
1004<p>Privacy Policy</p>
1005</a>
1006  </li>  
1007    <li class="nav-item">
1008    <a class="nav-link" href="https://www.rpact.com/imprint">
1009<p>Imprint</p>
1010</a>
1011  </li>  
1012    <li class="nav-item">
1013 <a class="nav-link" href="#" id="open_preferences_center" title="Cookie Settings">Cookies</a>
1014  </li>  
1015    <li class="nav-item">
1016    <a class="nav-link" href="https://www.rpact.com/contact">
1017<p>Contact</p>
1018</a>
1019  </li>  
1020</ul>
1021    </div>
1022    <div class="nav-footer-right">
1023      <ul class="footer-items list-unstyled">
1024    <li class="nav-item compact">
1025    <a class="nav-link" href="https://www.linkedin.com/company/rpact/">
1026      <i class="bi bi-linkedin" role="img" aria-label="LinkedIn">
1027</i> 
1028    </a>
1029  </li>  
1030    <li class="nav-item compact">
1031    <a class="nav-link" href="https://github.com/rpact-com">
1032      <i class="bi bi-github" role="img" aria-label="GitHub">
1033</i> 
1034    </a>
1035  </li>  
1036</ul>
1037    </div>
1038  </div>
1039</footer>
1040
1041
1042
1043
1044</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.