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"><-</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">|></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">|></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">|></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">|></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"><-</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"><-</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">|></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">|></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 <- 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 <- 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='rpact.com';a='@';n='info';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='rpact.com';a='@';n='support';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.