PageSourceSearch

https://r-consortium.org/about/index.html

html r-consortium.org collected 2026-09-24 09:13:50 UTC 28,958 bytes, 735 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
10<title>index – R Consortium</title>
11<style>
12/* Default styles provided by pandoc.
13** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
14*/
15span.smallcaps{font-variant: small-caps;}
16div.columns{display: flex; gap: 1.5em;}
17div.column{flex: auto;}
18@media screen {
19div.columns{gap: min(4vw, 1.5em);}
20div.column{overflow-x: auto;}
21}
22div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
23ul.task-list{list-style: none;}
24ul.task-list li input[type="checkbox"] {
25  width: 0.8em;
26  margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
27  vertical-align: middle;
28}
29</style>
30
31
32<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 32
32
33<script src="../site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 33
33
34<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 34
34
35<script src="../site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 35
35
36<script src="../site_libs/quarto-search/quarto-search.js"></script>
36
37<meta name="quarto:offset" content="../">
38<link href="..//images/rc-favicon.svg" rel="icon" type="image/svg+xml">
39<script src="../site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 39
39
40<script src="../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 40
40
41<script src="../site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 41
41
42<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 42
42
43<script src="../site_libs/quarto-html/anchor.min.js"></script>
43
44<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
45<link href="../site_libs/quarto-html/quarto-syntax-highlighting-64a204ab8560d761af7679ceaba22944.css" rel="stylesheet" id="quarto-text-highlighting-styles">
46<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
46
47<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
48<link href="../site_libs/bootstrap/bootstrap-609e0ed9670d325724d610bb306d8b49.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
49<link href="../site_libs/quarto-contrib/bootstrap-icons-1.13.1/bootstrap-icons.css" rel="stylesheet">
50<script id="quarto-search-options" type="application/json">{
51  "location": "navbar",
52  "copy-button": false,
53  "collapse-after": 3,
54  "panel-placement": "end",
55  "type": "overlay",
56  "limit": 50,
57  "keyboard-shortcut": [
58    "f",
59    "/",
60    "s"
61  ],
62  "show-item-context": false,
63  "language": {
64    "search-no-results-text": "No results",
65    "search-matching-documents-text": "matching documents",
66    "search-copy-link-title": "Copy link to search",
67    "search-hide-matches-text": "Hide additional matches",
68    "search-more-match-text": "more match in this document",
69    "search-more-matches-text": "more matches in this document",
70    "search-clear-button-title": "Clear",
71    "search-text-placeholder": "",
72    "search-detached-cancel-button-title": "Cancel",
73    "search-submit-button-title": "Submit",
74    "search-label": "Search"
75  }
76}</script>
vendor: 67 bytes, lines 76-77
76
77<script async="" src="https://www.googletagmanager.com/gtag/js?id=
77G-B697SX1BNN
vendor: 13 bytes, lines 77-78
77"></script>
78
79<script type="text/javascript">
80
vendor: 127 bytes, lines 81-84
81window.dataLayer = window.dataLayer || [];
82function gtag(){dataLayer.push(arguments);}
83gtag('js', new Date());
84gtag('config', '
84G-B697SX1BNN
vendor: 29 bytes, line 84
84', { 'anonymize_ip': true});
85</script>
85
86
87
88<link rel="stylesheet" href="../styles.css">
89</head>
90
91<body class="nav-fixed fullcontent quarto-light">
92
93<div id="quarto-search-results"></div>
94  <header id="quarto-header" class="headroom fixed-top">
95    <nav class="navbar navbar-expand-lg " data-bs-theme="dark">
96      <div class="navbar-container container-fluid">
97      <div class="navbar-brand-container mx-auto">
98    <a href="../index.html" class="navbar-brand navbar-brand-logo">
99    <img src="../images/RConsortium_Horizontal_Pantone.webp" alt="R Consortium logo" class="navbar-logo light-content">
100    <img src="../images/RConsortium_Horizontal_Pantone.webp" alt="R Consortium logo" class="navbar-logo dark-content">
101    </a>
102  </div>
103            <div id="quarto-search" class="" title="Search"></div>
104          <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(); }">
105  <span class="navbar-toggler-icon"></span>
106</button>
107          <div class="collapse navbar-collapse" id="navbarCollapse">
108            <ul class="navbar-nav navbar-nav-scroll ms-auto">
109  <li class="nav-item dropdown ">
110    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-about" role="link" data-bs-toggle="dropdown" aria-expanded="false">
111 <span class="menu-text">About</span>
112    </a>
113    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-about">    
114        <li>
115    <a class="dropdown-item" href="../about/index.html">
116 <span class="dropdown-text">Mission</span></a>
117  </li>  
118        <li>
119    <a class="dropdown-item" href="../about/governance.html">
120 <span class="dropdown-text">Governance</span></a>
121  </li>  
122        <li>
123    <a class="dropdown-item" href="../rc-docs/R-Consortium-Bylaws-7-9-2024.pdf">
124 <span class="dropdown-text">Bylaws (PDF)</span></a>
125  </li>  
126        <li>
127    <a class="dropdown-item" href="../governance/isc-charter.html">
128 <span class="dropdown-text">ISC Charter</span></a>
129  </li>  
130        <li>
131    <a class="dropdown-item" href="../rc-docs/R-Consortium-Marketing-Committee-Charter-2021-10-27.pdf">
132 <span class="dropdown-text">Marketing Committee Charter (PDF)</span></a>
133  </li>  
134        <li>
135    <a class="dropdown-item" href="../about/faq.html">
136 <span class="dropdown-text">FAQ</span></a>
137  </li>  
138        <li>
139    <a class="dropdown-item" href="../about/contact.html">
140 <span class="dropdown-text">Contact</span></a>
141  </li>  
142        <li>
143    <a class="dropdown-item" href="../about/privacy.html">
144 <span class="dropdown-text">Privacy Policy</span></a>
145  </li>  
146    </ul>
147  </li>
148  <li class="nav-item dropdown ">
149    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-members" role="link" data-bs-toggle="dropdown" aria-expanded="false">
150 <span class="menu-text">Members</span>
151    </a>
152    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-members">    
153        <li>
154    <a class="dropdown-item" href="../members.html">
155 <span class="dropdown-text">Members</span></a>
156  </li>  
157        <li>
158    <a class="dropdown-item" href="../about/join.html">
159 <span class="dropdown-text">Join</span></a>
160  </li>  
161        <li>
162    <a class="dropdown-item" href="../rc-docs/R-Consortium-Membership-Agreement-1157181-v2-Approved-11.20.19.pdf">
163 <span class="dropdown-text">Membership Agreement (PDF)</span></a>
164  </li>  
165    </ul>
166  </li>
167  <li class="nav-item dropdown ">
168    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-grants" role="link" data-bs-toggle="dropdown" aria-expanded="false">
169 <span class="menu-text">Grants</span>
170    </a>
171    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-grants">    
172        <li>
173    <a class="dropdown-item" href="../all-projects/index.html">
174 <span class="dropdown-text">Goal of ISC Grants Program</span></a>
175  </li>  
176        <li>
177    <a class="dropdown-item" href="../all-projects/funded-projects.html">
178 <span class="dropdown-text">Recipients of ISC Grants</span></a>
179  </li>  
180        <li>
181    <a class="dropdown-item" href="../all-projects/callforproposals.html">
182 <span class="dropdown-text">Call for Proposals</span></a>
183  </li>  
184        <li>
185    <a class="dropdown-item" href="../all-projects/rugsprogram.html">
186 <span class="dropdown-text">RUGS Program</span></a>
187  </li>  
188        <li>
189    <a class="dropdown-item" href="../all-projects/submittingforpayment.html">
190 <span class="dropdown-text">Submitting for payment</span></a>
191  </li>  
192    </ul>
193  </li>
194  <li class="nav-item dropdown ">
195    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-projects" role="link" data-bs-toggle="dropdown" aria-expanded="false">
196 <span class="menu-text">Projects</span>
197    </a>
198    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-projects">    
199        <li>
200    <a class="dropdown-item" href="https://rladies.org/">
201 <span class="dropdown-text">R-Ladies</span></a>
202  </li>  
203        <li>
204    <a class="dropdown-item" href="https://r-dbi.org/">
205 <span class="dropdown-text">DBI</span></a>
206  </li>  
207        <li>
208    <a class="dropdown-item" href="https://r-universe.dev/search">
209 <span class="dropdown-text">
209R-Universe</span></a>
210  </li>  
211        <li>
212    <a class="dropdown-item" href="../all-projects/isc-working-groups.html">
213 <span class="dropdown-text">Working Groups</span></a>
214  </li>  
215        <li>
216    <a class="dropdown-item" href="../all-projects/previous-top-level-projects.html">
217 <span class="dropdown-text">Previous Top-Level Projects</span></a>
218  </li>  
219    </ul>
220  </li>
221  <li class="nav-item dropdown ">
222    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-events" role="link" data-bs-toggle="dropdown" aria-expanded="false">
223 <span class="menu-text">Events</span>
224    </a>
225    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-events">    
226        <li>
227    <a class="dropdown-item" href="https://rconsortium.github.io/RplusAI_website/">
228 <span class="dropdown-text">R+AI 2026 (Nov 10-11, 2026)</span></a>
229  </li>  
230        <li>
231    <a class="dropdown-item" href="../webinars/webinars.html">
232 <span class="dropdown-text">Webinars</span></a>
233  </li>  
234        <li>
235    <a class="dropdown-item" href="../news/events.html">
236 <span class="dropdown-text">Events</span></a>
237  </li>  
238        <li>
239    <a class="dropdown-item" href="../news/cal.html">
240 <span class="dropdown-text">Working Groups Calendar</span></a>
241  </li>  
242    </ul>
243  </li>
244  <li class="nav-item dropdown ">
245    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-news" role="link" data-bs-toggle="dropdown" aria-expanded="false">
246 <span class="menu-text">News</span>
247    </a>
248    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-news">    
249        <li>
250    <a class="dropdown-item" href="../blog/index.html">
251 <span class="dropdown-text">Blog</span></a>
252  </li>  
253        <li>
254    <a class="dropdown-item" href="../newsletters/newsletters.html">
255 <span class="dropdown-text">Newsletter</span></a>
256  </li>  
257    </ul>
258  </li>
259  <li class="nav-item">
260    <a class="nav-link" href="../codeofconduct.html"> 
261<span class="menu-text">Code of Conduct</span></a>
262  </li>  
263  <li class="nav-item compact">
264    <a class="nav-link" href="https://github.com/rconsortium"> <i class="bi bi-github" role="img">
265</i> 
266<span class="menu-text"></span></a>
267  </li>  
268  <li class="nav-item compact">
269    <a class="nav-link" href="https://www.linkedin.com/company/r-consortium/"> <i class="bi bi-linkedin" role="img">
270</i> 
271<span class="menu-text"></span></a>
272  </li>  
273  <li class="nav-item compact">
274    <a class="nav-link" href="https://fosstodon.org/@RConsortium"> <i class="bi bi-mastodon" role="img">
275</i> 
276<span class="menu-text"></span></a>
277  </li>  
278  <li class="nav-item">
279    <a class="nav-link" href="https://bsky.app/profile/rconsortium.bsky.social"> 
280<span class="menu-text"><i class="bi-bluesky " style="" role="img" aria-hidden="true"></i></span></a>
281  </li>  
282  <li class="nav-item compact">
283    <a class="nav-link" href="https://www.youtube.com/@RConsortium"> <i class="bi bi-youtube" role="img">
284</i> 
285<span class="menu-text"></span></a>
286  </li>  
287</ul>
288          </div> <!-- /navcollapse -->
289            <div class="quarto-navbar-tools">
290</div>
291      </div> <!-- /container-fluid -->
292    </nav>
293</header>
294<!-- content -->
295<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
296<!-- sidebar -->
297<!-- margin-sidebar -->
298    
299<!-- main -->
300<main class="content" id="quarto-document-content"><header id="title-block-header" class="quarto-title-block"></header>
301
302
303
304
305<section id="r-consortium-mission-statement" class="level1">
306<h1>R Consortium Mission Statement</h1>
307<p>The R Consortium promotes the growth and development of the R language and its ecosystem by supporting technical and social infrastructure, fostering community engagement, and driving industry adoption.</p>
308<p>We work to ensure a thriving, diverse global R community by providing resources, facilitating collaboration, and advocating for the use of R in multiple industry sectors.</p>
309<p>We provide funding for technical infrastructure through grants and working groups.</p>
310<p>We provide funding for social infrastructure through grants for R user groups and events around the world.</p>
311<p>We provide a neutral space where industry, academia, and government can collaborate on mission critical processes and standards.</p>
312
313
314</section>
315
316</main> <!-- /main -->
317<script id="quarto-html-after-body" type="application/javascript">
318  window.document.addEventListener("DOMContentLoaded", function (event) {
319    const icon = "";
320    const anchorJS = new window.AnchorJS();
321    anchorJS.options = {
322      placement: 'right',
323      icon: icon
324    };
325    anchorJS.add('.anchored');
326    const isCodeAnnotation = (el) => {
327      for (const clz of el.classList) {
328        if (clz.startsWith('code-annotation-')) {                     
329          return true;
330        }
331      }
332      return false;
333    }
334    const onCopySuccess = function(e) {
335      // button target
336      const button = e.trigger;
337      // don't keep focus
338      button.blur();
339      // flash "checked"
340      button.classList.add('code-copy-button-checked');
341      var currentTitle = button.getAttribute("title");
342      button.setAttribute("title", "Copied!");
343      let tooltip;
344      if (window.bootstrap) {
345        button.setAttribute("data-bs-toggle", "tooltip");
346        button.setAttribute("data-bs-placement", "left");
347        button.setAttribute("data-bs-title", "Copied!");
348        tooltip = new bootstrap.Tooltip(button, 
349          { trigger: "manual", 
350            customClass: "code-copy-button-tooltip",
351            offset: [0, -8]});
352        tooltip.show();    
353      }
354      setTimeout(function() {
355        if (tooltip) {
356          tooltip.hide();
357          button.removeAttribute("data-bs-title");
358          button.removeAttribute("data-bs-toggle");
359          button.removeAttribute("data-bs-placement");
360        }
361        button.setAttribute("title", currentTitle);
362        button.classList.remove('code-copy-button-checked');
363      }, 1000);
364      // clear code selection
365      e.clearSelection();
366    }
367    const getTextToCopy = function(trigger) {
368      const outerScaffold = trigger.parentElement.cloneNode(true);
369      const codeEl = outerScaffold.querySelector('code');
370      for (const childEl of codeEl.children) {
371        if (isCodeAnnotation(childEl)) {
372          childEl.remove();
373        }
374      }
375      return codeEl.innerText;
376    }
377    const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
378      text: getTextToCopy
379    });
380    clipboard.on('success', onCopySuccess);
381    if (window.document.getElementById('quarto-embedded-source-code-modal')) {
382      const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
383        text: getTextToCopy,
384        container: window.document.getElementById('quarto-embedded-source-code-modal')
385      });
386      clipboardModal.on('success', onCopySuccess);
387    }
388      var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
389      var mailtoRegex = new RegExp(/^mailto:/);
390        var filterRegex = new RegExp("https:\/\/r-consortium\.org");
391      var isInternal = (href) => {
392          return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
393      }
394      // Inspect non-navigation links and adorn them if external
395     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)');
396      for (var i=0; i<links.length; i++) {
397        const link = links[i];
398        if (!isInternal(link.href)) {
399          // undo the damage that might have been done by quarto-nav.js in the case of
400          // links that we want to consider external
401          if (link.dataset.originalHref !== undefined) {
402            link.href = link.dataset.originalHref;
403          }
404        }
405      }
406    function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
407      const config = {
408        allowHTML: true,
409        maxWidth: 500,
410        delay: 100,
411        arrow: false,
412        appendTo: function(el) {
413            return el.parentElement;
414        },
415        interactive: true,
416        interactiveBorder: 10,
417        theme: 'quarto',
418        placement: 'bottom-start',
419      };
420      if (contentFn) {
421        config.content = contentFn;
422      }
423      if (onTriggerFn) {
424        config.onTrigger = onTriggerFn;
425      }
426      if (onUntriggerFn) {
427        config.onUntrigger = onUntriggerFn;
428      }
429      window.tippy(el, config); 
430    }
431    const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
432    for (var i=0; i<noterefs.length; i++) {
433      const ref = noterefs[i];
434      tippyHover(ref, function() {
435        // use id or data attribute instead here
436        let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
437        try { href = new URL(href).hash; } catch {}
438        const id = href.replace(/^#\/?/, "");
439        const note = window.document.getElementById(id);
440        if (note) {
441          return note.innerHTML;
442        } else {
443          return "";
444        }
445      });
446    }
447    const xrefs = window.document.querySelectorAll('a.quarto-xref');
448    const processXRef = (id, note) => {
449      // Strip column container classes
450      const stripColumnClz = (el) => {
451        el.classList.remove("page-full", "page-columns");
452        if (el.children) {
453          for (const child of el.children) {
454            stripColumnClz(child);
455          }
456        }
457      }
458      stripColumnClz(note)
459      if (id === null || id.startsWith('sec-')) {
460        // Special case sections, only their first couple elements
461        const container = document.createElement("div");
462        if (note.children && note.children.length > 2) {
463          container.appendChild(note.children[0].cloneNode(true));
464          for (let i = 1; i < note.children.length; i++) {
465            const child = note.children[i];
466            if (child.tagName === "P" && child.innerText === "") {
467              continue;
468            } else {
469              container.appendChild(child.cloneNode(true));
470              break;
471            }
472          }
473          if (window.Quarto?.typesetMath) {
474            window.Quarto.typesetMath(container);
475          }
476          return container.innerHTML
477        } else {
478          if (window.Quarto?.typesetMath) {
479            window.Quarto.typesetMath(note);
480          }
481          return note.innerHTML;
482        }
483      } else {
484        // Remove any anchor links if they are present
485        const anchorLink = note.querySelector('a.anchorjs-link');
486        if (anchorLink) {
487          anchorLink.remove();
488        }
489        if (window.Quarto?.typesetMath) {
490          window.Quarto.typesetMath(note);
491        }
492        if (note.classList.contains("callout")) {
493          return note.outerHTML;
494        } else {
495          return note.innerHTML;
496        }
497      }
498    }
499    for (var i=0; i<xrefs.length; i++) {
500      const xref = xrefs[i];
501      tippyHover(xref, undefined, function(instance) {
502        instance.disable();
503        let url = xref.getAttribute('href');
504        let hash = undefined; 
505        if (url.startsWith('#')) {
506          hash = url;
507        } else {
508          try { hash = new URL(url).hash; } catch {}
509        }
510        if (hash) {
511          const id = hash.replace(/^#\/?/, "");
512          const note = window.document.getElementById(id);
513          if (note !== null) {
514            try {
515              const html = processXRef(id, note.cloneNode(true));
516              instance.setContent(html);
517            } finally {
518              instance.enable();
519              instance.show();
520            }
521          } else {
522            // See if we can fetch this
523            fetch(url.split('#')[0])
524            .then(res => res.text())
525            .then(html => {
526              const parser = new DOMParser();
527              const htmlDoc = parser.parseFromString(html, "text/html");
528              const note = htmlDoc.getElementById(id);
529              if (note !== null) {
530                const html = processXRef(id, note);
531                instance.setContent(html);
532              } 
533            }).finally(() => {
534              instance.enable();
535              instance.show();
536            });
537          }
538        } else {
539          // See if we can fetch a full url (with no hash to target)
540          // This is a special case and we should probably do some content thinning / targeting
541          fetch(url)
542          .then(res => res.text())
543          .then(html => {
544            const parser = new DOMParser();
545            const htmlDoc = parser.parseFromString(html, "text/html");
546            const note = htmlDoc.querySelector('main.content');
547            if (note !== null) {
548              // This should only happen for chapter cross references
549              // (since there is no id in the URL)
550              // remove the first header
551              if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
552                note.children[0].remove();
553              }
554              const html = processXRef(null, note);
555              instance.setContent(html);
556            } 
557          }).finally(() => {
558            instance.enable();
559            instance.show();
560          });
561        }
562      }, function(instance) {
563      });
564    }
565        let selectedAnnoteEl;
566        const selectorForAnnotation = ( cell, annotation) => {
567          let cellAttr = 'data-code-cell="' + cell + '"';
568          let lineAttr = 'data-code-annotation="' +  annotation + '"';
569          const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
570          return selector;
571        }
572        const selectCodeLines = (annoteEl) => {
573          const doc = window.document;
574          const targetCell = annoteEl.getAttribute("data-target-cell");
575          const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
576          const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
577          const lines = annoteSpan.getAttribute("data-code-lines").split(",");
578          const lineIds = lines.map((line) => {
579            return targetCell + "-" + line;
580          })
581          let top = null;
582          let height = null;
583          let parent = null;
584          if (lineIds.length > 0) {
585              //compute the position of the single el (top and bottom and make a div)
586              const el = window.document.getElementById(lineIds[0]);
587              top = el.offsetTop;
588              height = el.offsetHeight;
589              parent = el.parentElement.parentElement;
590            if (lineIds.length > 1) {
591              const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
592              const bottom = lastEl.offsetTop + lastEl.offsetHeight;
593              height = bottom - top;
594            }
595            if (top !== null && height !== null && parent !== null) {
596              // cook up a div (if necessary) and position it 
597              let div = window.document.getElementById("code-annotation-line-highlight");
598              if (div === null) {
599                div = window.document.createElement("div");
600                div.setAttribute("id", "code-annotation-line-highlight");
601                div.style.position = 'absolute';
602                parent.appendChild(div);
603              }
604              div.style.top = top - 2 + "px";
605              div.style.height = height + 4 + "px";
606              div.style.left = 0;
607              let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
608              if (gutterDiv === null) {
609                gutterDiv = window.document.createElement("div");
610                gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
611                gutterDiv.style.position = 'absolute';
612                const codeCell = window.document.getElementById(targetCell);
613                const gutter = codeCell.querySelector('.code-annotation-gutter');
614                gutter.appendChild(gutterDiv);
615              }
616              gutterDiv.style.top = top - 2 + "px";
617              gutterDiv.style.height = height + 4 + "px";
618            }
619            selectedAnnoteEl = annoteEl;
620          }
621        };
622        const unselectCodeLines = () => {
623          const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
624          elementsIds.forEach((elId) => {
625            const div = window.document.getElementById(elId);
626            if (div) {
627              div.remove();
628            }
629          });
630          selectedAnnoteEl = undefined;
631        };
632          // Handle positioning of the toggle
633      window.addEventListener(
634        "resize",
635        throttle(() => {
636          elRect = undefined;
637          if (selectedAnnoteEl) {
638            selectCodeLines(selectedAnnoteEl);
639          }
640        }, 10)
641      );
642      function throttle(fn, ms) {
643      let throttle = false;
644      let timer;
645        return (...args) => {
646          if(!throttle) { // first call gets through
647              fn.apply(this, args);
648              throttle = true;
649          } else { // all the others get throttled
650              if(timer) clearTimeout(timer); // cancel #2
651              timer = setTimeout(() => {
652                fn.apply(this, args);
653                timer = throttle = false;
654              }, ms);
655          }
656        };
657      }
658        // Attach click handler to the DT
659        const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
660        for (const annoteDlNode of annoteDls) {
661          annoteDlNode.addEventListener('click', (event) => {
662            const clickedEl = event.target;
663            if (clickedEl !== selectedAnnoteEl) {
664              unselectCodeLines();
665              const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
666              if (activeEl) {
667                activeEl.classList.remove('code-annotation-active');
668              }
669              selectCodeLines(clickedEl);
670              clickedEl.classList.add('code-annotation-active');
671            } else {
672              // Unselect the line
673              unselectCodeLines();
674              clickedEl.classList.remove('code-annotation-active');
675            }
676          });
677        }
678    const findCites = (el) => {
679      const parentEl = el.parentElement;
680      if (parentEl) {
681        const cites = parentEl.dataset.cites;
682        if (cites) {
683          return {
684            el,
685            cites: cites.split(' ')
686          };
687        } else {
688          return findCites(el.parentElement)
689        }
690      } else {
691        return undefined;
692      }
693    };
694    var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
695    for (var i=0; i<bibliorefs.length; i++) {
696      const ref = bibliorefs[i];
697      const citeInfo = findCites(ref);
698      if (citeInfo) {
699        tippyHover(citeInfo.el, function() {
700          var popup = window.document.createElement('div');
701          citeInfo.cites.forEach(function(cite) {
702            var citeDiv = window.document.createElement('div');
703            citeDiv.classList.add('hanging-indent');
704            citeDiv.classList.add('csl-entry');
705            var biblioDiv = window.document.getElementById('ref-' + cite);
706            if (biblioDiv) {
707              citeDiv.innerHTML = biblioDiv.innerHTML;
708            }
709            popup.appendChild(citeDiv);
710          });
711          return popup.innerHTML;
712        });
713      }
714    }
715  });
716  </script>
716
717</div> <!-- /content -->
718<footer class="footer">
719  <div class="nav-footer">
720    <div class="nav-footer-left">
721      &nbsp;
722    </div>   
723    <div class="nav-footer-center">
724<p>© 2026 R Consortium. R Consortium is a non-profit organization, and R Consortium™ is a trademark of R Consortium. All Rights Reserved.<br>This website is built on Quarto, an open-source scientific and technical publishing system. Quarto uses R Markdown and knitr to execute R code.<br>Contact us at: [email protected]</p>
725</div>
726    <div class="nav-footer-right">
727      &nbsp;
728    </div>
729  </div>
730</footer>
731
732
733
734
735</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.