├── .gitignore ├── 000.Rproj ├── LICENSE ├── README.md ├── _language.yml ├── _quarto.yml ├── datasets ├── dca.r ├── hotels_df.rdata ├── pimadiabetes.rdata ├── tune_res.rdata ├── 例16-02.sav ├── 例16-03.sav ├── 例16-04.csv └── 例16-05.csv ├── docs ├── 9999-appendix.html ├── KNN.html ├── KNN_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-14-1.png │ │ ├── unnamed-chunk-20-1.png │ │ ├── unnamed-chunk-8-1.png │ │ └── unnamed-chunk-9-1.png ├── catboost.html ├── catboost_files │ ├── figure-html │ │ ├── unnamed-chunk-13-1.png │ │ ├── unnamed-chunk-17-1.png │ │ ├── unnamed-chunk-18-1.png │ │ ├── unnamed-chunk-19-1.png │ │ ├── unnamed-chunk-20-1.png │ │ └── unnamed-chunk-22-1.png │ └── figure-pdf │ │ ├── unnamed-chunk-13-1.pdf │ │ ├── unnamed-chunk-17-1.pdf │ │ ├── unnamed-chunk-18-1.pdf │ │ ├── unnamed-chunk-19-1.pdf │ │ ├── unnamed-chunk-20-1.pdf │ │ └── unnamed-chunk-22-1.pdf ├── figs │ ├── 46346465dfgdfgd.jpg │ ├── 6325461.png │ ├── PixPin_2024-04-22_15-54-53.png │ ├── PixPin_2024-04-22_16-05-22.png │ ├── PixPin_2024-04-26_20-06-48.png │ ├── PixPin_2024-04-27_13-20-37.png │ ├── PixPin_2024-04-27_19-11-28.png │ ├── PixPin_2024-04-27_19-52-48.png │ ├── PixPin_2024-04-27_20-19-25.png │ ├── PixPin_2024-04-28_10-41-44.png │ ├── PixPin_2024-04-28_12-44-41.png │ ├── PixPin_2024-04-28_12-56-47.png │ ├── PixPin_2024-04-30_20-18-13.png │ ├── PixPin_2024-04-30_20-19-09.png │ ├── PixPin_2024-05-05_19-41-50.png │ ├── Snipaste_2023-04-01_14-12-58.png │ ├── Snipaste_2023-04-05_16-05-01.png │ ├── Snipaste_2023-04-05_16-07-01.png │ ├── Snipaste_2023-06-12_15-40-00.png │ └── 模型复杂度和泛化误差.png ├── gbm.html ├── gbm_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-13-1.png │ │ ├── unnamed-chunk-14-1.png │ │ ├── unnamed-chunk-15-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-18-1.png │ │ ├── unnamed-chunk-6-1.png │ │ ├── unnamed-chunk-7-1.png │ │ ├── unnamed-chunk-8-1.png │ │ └── unnamed-chunk-9-1.png ├── glmnet.html ├── glmnet_files │ └── figure-html │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-18-1.png │ │ ├── unnamed-chunk-29-1.png │ │ ├── unnamed-chunk-31-1.png │ │ ├── unnamed-chunk-45-1.png │ │ ├── unnamed-chunk-47-1.png │ │ ├── unnamed-chunk-49-1.png │ │ ├── unnamed-chunk-5-1.png │ │ ├── unnamed-chunk-50-1.png │ │ ├── unnamed-chunk-6-1.png │ │ └── unnamed-chunk-7-1.png ├── index.html ├── lightGBM.html ├── robots.txt ├── search.json ├── site_libs │ ├── DiagrammeR-styles-0.2 │ │ └── styles.css │ ├── bootstrap │ │ ├── bootstrap-icons.css │ │ ├── bootstrap-icons.woff │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.js │ ├── clipboard │ │ └── clipboard.min.js │ ├── grViz-binding-1.0.10 │ │ └── grViz.js │ ├── htmlwidgets-1.6.4 │ │ └── htmlwidgets.js │ ├── quarto-html │ │ ├── anchor.min.js │ │ ├── popper.min.js │ │ ├── quarto-syntax-highlighting.css │ │ ├── quarto.js │ │ ├── tippy.css │ │ └── tippy.umd.min.js │ ├── quarto-nav │ │ ├── headroom.min.js │ │ └── quarto-nav.js │ ├── quarto-search │ │ ├── autocomplete.umd.js │ │ ├── fuse.min.js │ │ └── quarto-search.js │ └── viz-1.8.2 │ │ └── viz.js ├── sitemap.xml ├── xgboost.html ├── 主成分分析.html ├── 主成分分析_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ └── unnamed-chunk-9-1.png ├── 主成分分析可视化.html ├── 主成分分析可视化_files │ └── figure-html │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-13-1.png │ │ ├── unnamed-chunk-14-1.png │ │ ├── unnamed-chunk-17-1.png │ │ ├── unnamed-chunk-18-1.png │ │ ├── unnamed-chunk-19-1.png │ │ ├── unnamed-chunk-20-1.png │ │ ├── unnamed-chunk-21-1.png │ │ ├── unnamed-chunk-22-1.png │ │ ├── unnamed-chunk-23-1.png │ │ ├── unnamed-chunk-24-1.png │ │ ├── unnamed-chunk-25-1.png │ │ ├── unnamed-chunk-26-1.png │ │ ├── unnamed-chunk-3-1.png │ │ ├── unnamed-chunk-30-1.png │ │ ├── unnamed-chunk-31-1.png │ │ ├── unnamed-chunk-5-1.png │ │ ├── unnamed-chunk-6-1.png │ │ ├── unnamed-chunk-7-1.png │ │ ├── unnamed-chunk-8-1.png │ │ └── unnamed-chunk-9-1.png ├── 决策树.html ├── 决策树_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-19-1.png │ │ ├── unnamed-chunk-4-1.png │ │ ├── unnamed-chunk-5-1.png │ │ └── unnamed-chunk-6-1.png ├── 决策树可视化.html ├── 决策树可视化_files │ └── figure-html │ │ ├── unnamed-chunk-2-1.png │ │ ├── unnamed-chunk-3-1.png │ │ ├── unnamed-chunk-4-1.png │ │ └── unnamed-chunk-5-1.png ├── 变量选择.html ├── 多元线性回归.html ├── 多元线性回归_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-13-1.png │ │ ├── unnamed-chunk-14-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-2-1.png │ │ ├── unnamed-chunk-21-1.png │ │ ├── unnamed-chunk-6-1.png │ │ ├── unnamed-chunk-7-1.png │ │ └── unnamed-chunk-9-1.png ├── 支持向量机.html ├── 支持向量机_files │ └── figure-html │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-6-1.png │ │ ├── unnamed-chunk-8-1.png │ │ ├── unnamed-chunk-8-2.png │ │ ├── unnamed-chunk-8-3.png │ │ └── unnamed-chunk-8-4.png ├── 支持向量机核函数比较.html ├── 支持向量机核函数比较_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ └── unnamed-chunk-12-1.png ├── 数据准备.html ├── 数据准备_files │ └── figure-html │ │ ├── unnamed-chunk-2-1.png │ │ ├── unnamed-chunk-3-1.png │ │ ├── unnamed-chunk-4-1.png │ │ └── unnamed-chunk-5-1.png ├── 数据划分.html ├── 数据预处理.html ├── 数据预处理_files │ ├── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-15-1.png │ │ ├── unnamed-chunk-6-1.png │ │ └── unnamed-chunk-9-1.png │ └── figure-pdf │ │ ├── unnamed-chunk-10-1.pdf │ │ ├── unnamed-chunk-11-1.pdf │ │ ├── unnamed-chunk-15-1.pdf │ │ ├── unnamed-chunk-6-1.pdf │ │ └── unnamed-chunk-9-1.pdf ├── 机器学习简介.html ├── 模型评价.html ├── 聚类分析.html ├── 聚类分析_files │ └── figure-html │ │ ├── unnamed-chunk-10-1.png │ │ ├── unnamed-chunk-11-1.png │ │ ├── unnamed-chunk-12-1.png │ │ ├── unnamed-chunk-13-1.png │ │ ├── unnamed-chunk-14-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-16-2.png │ │ ├── unnamed-chunk-17-1.png │ │ ├── unnamed-chunk-18-1.png │ │ ├── unnamed-chunk-20-1.png │ │ ├── unnamed-chunk-21-1.png │ │ ├── unnamed-chunk-24-1.png │ │ ├── unnamed-chunk-25-1.png │ │ ├── unnamed-chunk-4-1.png │ │ ├── unnamed-chunk-5-1.png │ │ ├── unnamed-chunk-5-2.png │ │ ├── unnamed-chunk-6-1.png │ │ ├── unnamed-chunk-8-1.png │ │ └── unnamed-chunk-9-1.png ├── 超参数调优简介.html ├── 逻辑回归.html ├── 随机森林.html ├── 随机森林_files │ └── figure-html │ │ ├── unnamed-chunk-15-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-17-1.png │ │ ├── unnamed-chunk-4-1.png │ │ ├── unnamed-chunk-7-1.png │ │ ├── unnamed-chunk-8-1.png │ │ └── unnamed-chunk-9-1.png └── 集成算法类型.html ├── figs ├── 46346465dfgdfgd.jpg ├── 6325461.png ├── PixPin_2024-04-22_15-54-53.png ├── PixPin_2024-04-22_16-05-22.png ├── PixPin_2024-04-22_16-12-43.png ├── PixPin_2024-04-26_19-58-41.png ├── PixPin_2024-04-26_20-06-48.png ├── PixPin_2024-04-27_19-11-28.png ├── PixPin_2024-04-27_19-52-48.png ├── PixPin_2024-04-27_20-19-25.png ├── PixPin_2024-04-27_20-20-23.png ├── PixPin_2024-04-28_10-41-44.png ├── PixPin_2024-04-28_12-44-41.png ├── PixPin_2024-04-28_12-56-47.png ├── PixPin_2024-04-30_20-18-13.png ├── PixPin_2024-04-30_20-19-09.png ├── PixPin_2024-05-05_19-41-50.png ├── PixPin_2024-05-17_15-53-34.png ├── Snipaste_2023-04-01_14-12-58.png ├── Snipaste_2023-04-05_16-05-01.png ├── Snipaste_2023-04-05_16-07-01.png ├── Snipaste_2023-06-12_15-40-00.png └── 模型复杂度和泛化误差.png └── preamble.tex /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | .quarto 6 | *.qmd 7 | xgboost_files/ 8 | catboost_info/ 9 | _book/ 10 | .quarto/ 11 | 12 | /.quarto/ 13 | -------------------------------------------------------------------------------- /000.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: XeLaTeX 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 ayue 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > 面向医学生/医生的实用机器学习教程,不适合计算机相关专业人士。 2 | 3 | ## 为什么写这个合集? 4 | 5 | 写这个合集的目的是为了帮助,从未接触过或不太了解机器学习的医学生/医生,快速了解机器学习,以及快速上手机器学习实战。 6 | 7 | 各种机器学习方法在医学领域中的使用越来越频繁,在各种医学相关的文献期刊中也是越来越常见,但是机器学习对于没有任何计算机背景的医学生/医生来说并不是那么友好。 8 | 9 | - 首先,复杂的概念以及冗长的公式推导让人望而却步; 10 | - 其次,目前市面上关于机器学习的书籍或视频资料等大多都是面向计算机相关人员的,对于没有任何计算机背景的人来说学习门槛偏高; 11 | - 第三,网络中的资料知识点太过杂乱,没有系统性的整理,质量也良莠不齐,很多代码难以复现,或者使用的方法太过老旧等,东拼西凑的学习体验较差。 12 | 13 | 所以我基于自己的学习经验以及看过的一些资料,整理了这本R语言机器学习相关的合集。相比于其他资料,个人认为本合集的优势很明显: 14 | 15 | - 本人是外科医生,也是从零开始学的这些东西,我对于各位医学生/医生学习过程中的痛点难点更加熟悉; 16 | - 系统整理、有头有尾、从易到难、循序渐进,重点展示大家迫切需要的内容; 17 | - 对于一些原理和概念,使用通俗易懂的语言进行解释,没有任何公式推导的内容。 18 | 19 | ## 合集介绍 20 | 21 | 本合集主要介绍如何使用R语言实现常见的机器学习方法,具体来说,本合集介绍了以下13种方法(后续可能会增加): 22 | 23 | - 聚类分析 24 | - 主成分分析 25 | - 线性回归 26 | - 逻辑回归 27 | - lasso回归 28 | - KNN 29 | - 支持向量机 30 | - 决策树 31 | - 随机森林 32 | - GBM 33 | - XGBoost 34 | - lightGBM 35 | - CatBoost 36 | 37 | 对于每种方法,都会首先介绍它的**原理**,这部分内容使用简洁易懂的语言向大家介绍一些算法的基本概念,不包含任何数学公式,方便大家理解。 38 | 39 | 然后是代码实战部分,这部分内容主要包括**模型建立、参数解释、结果解读、模型评价、超参数调优**等内容,力求详细、方便理解。由于临床医学中常见的任务都是分类任务,所以示例代码基本都是分类任务的演示。 40 | 41 | 对于生存分析,本合集并未涉及,因为生存任务和传统的分类/回归任务差别很大,大到可能需要单独开一个合集介绍,相关内容可参考:[R语言生存分析](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzOTQzNzU0NA==&action=getalbum&album_id=3157207532101337088&uin=&key=&devicetype=Windows+11+x64&version=63090a13&lang=zh_CN&ascene=0&session_us=gh_28ea67f3b544)。 42 | 43 | 模型评价部分重点展示了**混淆矩阵、敏感度/特异度、ROC曲线、PR曲线、校准曲线、决策曲线**等。 44 | 45 | 代码实战部分我并没有使用目前R语言机器学习领域很火爆的两个R包:`tidymodels`和`mlr3`,而是对于每种算法都使用了其对应的经典R包,比如:lasso回归部分使用了`glmnet`包、支持向量机部分使用了`e1071`包、随机森林部分使用了`randomForest`包。因为这两个R包本身还是基于这些经典的R包的,`tidymodels`和`mlr3`本身没有实现任何算法,它们只是对这些经典的R包进行了深度整合。所以,从这些R包开始学习方便为以后的进一步学习打下基础,如果你没接触过这些经典R包的话,有一些小问题你可能很难发现。 46 | 47 | [tidymodels](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzOTQzNzU0NA==&action=getalbum&album_id=2471700721298735105&scene=173&subscene=&sessionid=svr_a3acb4420ea&enterid=1714226193&from_msgid=2247500711&from_itemidx=1&count=3&nolastread=1#wechat_redirect)和[mlr3](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzOTQzNzU0NA==&action=getalbum&album_id=2267367378386731015&scene=173&subscene=&sessionid=svr_f66a5e6830a&enterid=1714226166&from_msgid=2247500669&from_itemidx=1&count=3&nolastread=1#wechat_redirect)的使用教程我在公众号中一直在更新,不久后也会整理成合集,还有一个[模型解释](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzOTQzNzU0NA==&action=getalbum&album_id=3302133732023369734&scene=173&subscene=&sessionid=svr_a8bea36737a&enterid=1714226258&from_msgid=2247501031&from_itemidx=1&count=3&nolastread=1#wechat_redirect)的合集也会整理出来。有了这些经典R包的基础之后,你会发现再学习`tidymodels`和`mlr3`会更加容易上手,毕竟就只需要学习下这两个R包的使用逻辑和语法就好了。 48 | 49 | 除此之外,本合集还介绍了一些机器学习中的其他重要问题,主要包括: 50 | 51 | - 数据预处理 52 | - 数据划分 53 | - 模型评价 54 | - 超参数调优 55 | - 变量选择 56 | 57 | 本合集介绍的内容非常基础,只是机器学习相关内容中的冰山一角,比如,对于模型的超参数调优,我只是演示了如何使用R包实现,虽然方法是对的,但是调参的方向并不一定对,或者说,有可能你一通操作下来,模型的表现还不如默认参数好。因为每种模型的调参方向都是不一样的,使用的方法也会有差别,这个需要专业知识,也需要相关的经验。更多专业的知识,需要大家自己阅读专业的书籍。 58 | 59 | 由于合集内容大部分都是代码实操,所以需要你对R语言有一些基础的理解,不然你可能会一直被一些基础的报错所困扰。每篇内容可能需要不同的R包,这里并没有展示安装这些R包的过程,大家需要自己安装。 60 | 61 | 限于个人专业、水平、时间等问题,难免有很多不足之处,欢迎大家以各种方式(微信、QQ、公众号留言等)交流、建议。但是请不要抬杠,也请不要成为喷子、伸手党。 62 | 63 | > 本合集是基于我公众号发表的[机器学习相关推文](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzOTQzNzU0NA==&action=getalbum&album_id=2267367379124928515&scene=126&sessionid=523916997&uin=&key=&devicetype=Windows+11+x64&version=63090819&lang=zh_CN&ascene=0)修改而来,为了更加适合机器学习初学者阅读以及方便理解,进行了**大量修改**,甚至可以说是从头重写!和我的其他合集一样,本合集也会保持长期更新。 64 | 65 | ## 作者介绍 66 | 67 | - 阿越,外科医生,R语言爱好者,长期分享R语言和医学统计学、临床预测模型、生信数据挖掘、R语言机器学习等知识。 68 | - 哔哩哔哩:[阿越就是我](https://space.bilibili.com/42460432) 69 | - Github:[ayueme](https://github.com/ayueme) 70 | - 公众号:**医学和生信笔记**,欢迎扫码关注: 71 | 72 | ![](figs/46346465dfgdfgd.jpg) -------------------------------------------------------------------------------- /_language.yml: -------------------------------------------------------------------------------- 1 | toc-title-document: "目录" 2 | toc-title-website: "该页面内容" 3 | 4 | related-formats-title: "其他格式" 5 | related-notebooks-title: "笔记本" 6 | source-notebooks-prefix: "资源" 7 | other-links-title: "其他链接" 8 | code-links-title: "代码链接" 9 | launch-dev-container-title: "启动 Dev Container" 10 | launch-binder-title: "启动 Binder" 11 | 12 | article-notebook-label: "文章笔记本" 13 | notebook-preview-download: "下载笔记本" 14 | notebook-preview-download-src: "下载源代码" 15 | notebook-preview-back: "返回文章" 16 | manuscript-meca-bundle: "MECA存档" 17 | 18 | section-title-abstract: "摘要" 19 | section-title-appendices: "附录" 20 | section-title-footnotes: "脚注" 21 | section-title-references: "参考" 22 | section-title-reuse: "重用" 23 | section-title-copyright: "版权" 24 | section-title-citation: "引文" 25 | 26 | appendix-attribution-bibtex: "BibTeX" 27 | appendix-attribution-cite-as: "请引用这项工作:" 28 | 29 | title-block-author-single: "作者" 30 | title-block-author-plural: "作者" 31 | title-block-affiliation-single: "联系" 32 | title-block-affiliation-plural: "隶属关系" 33 | title-block-published: "发布日期" 34 | title-block-modified: "修改的" 35 | title-block-keywords: "关键词" 36 | 37 | callout-tip-title: "提示" 38 | callout-note-title: "注释" 39 | callout-warning-title: "警告" 40 | callout-important-title: "重要" 41 | callout-caution-title: "注意" 42 | 43 | code-summary: "代码" 44 | 45 | code-line: "行" 46 | code-lines: "行" 47 | 48 | code-tools-menu-caption: "代码" 49 | code-tools-show-all-code: "显示所有代码" 50 | code-tools-hide-all-code: "隐藏所有代码" 51 | code-tools-view-source: "查看源代码" 52 | code-tools-source-code: "源代码" 53 | 54 | copy-button-tooltip: "复制到剪贴板" 55 | copy-button-tooltip-success: "已复制" 56 | 57 | repo-action-links-edit: "编辑该页面" 58 | repo-action-links-source: "查看代码" 59 | repo-action-links-issue: "报告问题" 60 | 61 | back-to-top: "回到顶部" 62 | 63 | search-no-results-text: "没有结果" 64 | search-matching-documents-text: "匹配的文档" 65 | search-copy-link-title: "复制搜索链接" 66 | search-hide-matches-text: "隐藏其它匹配结果" 67 | search-more-match-text: "更多匹配结果" 68 | search-more-matches-text: "更多匹配结果" 69 | search-clear-button-title: "清除" 70 | search-detached-cancel-button-title: "取消" 71 | search-submit-button-title: "提交" 72 | search-label: "搜索" 73 | 74 | toggle-section: "切換部分" 75 | toggle-sidebar: "切换侧边栏导航" 76 | toggle-dark-mode: "切换深色模式" 77 | toggle-reader-mode: "切换阅读器模式" 78 | toggle-navigation: "切换导航" 79 | 80 | crossref-fig-title: "图" 81 | crossref-tbl-title: "表格" 82 | crossref-lst-title: "列表" 83 | crossref-thm-title: "定理" 84 | crossref-lem-title: "引理" 85 | crossref-cor-title: "推论" 86 | crossref-prp-title: "命题" 87 | crossref-cnj-title: "猜想" 88 | crossref-def-title: "定义" 89 | crossref-exm-title: "例子" 90 | crossref-exr-title: "练习" 91 | crossref-ch-prefix: "章节" 92 | crossref-apx-prefix: "附录" 93 | crossref-sec-prefix: "章节" 94 | crossref-eq-prefix: "方程式" 95 | crossref-lof-title: "插图目录" 96 | crossref-lot-title: "列表目录" 97 | crossref-lol-title: "列表目录" 98 | 99 | environment-proof-title: "论证" 100 | environment-remark-title: "评语" 101 | environment-solution-title: "答案" 102 | 103 | listing-page-order-by: "排序方式" 104 | listing-page-order-by-default: "缺省" 105 | listing-page-order-by-date-asc: "日期升序" 106 | listing-page-order-by-date-desc: "日期降序" 107 | listing-page-order-by-number-desc: "降序" 108 | listing-page-order-by-number-asc: "升序" 109 | listing-page-field-date: "日期" 110 | listing-page-field-title: "标题" 111 | listing-page-field-description: "描述" 112 | listing-page-field-author: "作者" 113 | listing-page-field-filename: "文件名" 114 | listing-page-field-filemodified: "修改时间" 115 | listing-page-field-subtitle: "副标题" 116 | listing-page-field-readingtime: "阅读时间" 117 | listing-page-field-categories: "类别" 118 | listing-page-minutes-compact: "{0} 分钟" 119 | listing-page-category-all: "全部" 120 | listing-page-no-matches: "无匹配项" 121 | listing-page-field-wordcount: "单词统计" 122 | listing-page-words: "{0}个单词" -------------------------------------------------------------------------------- /_quarto.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: book 3 | output-dir: _book 4 | 5 | knitr: 6 | opts_chunk: 7 | collapse: true 8 | message: false 9 | warning: false 10 | 11 | book: 12 | title: "R语言实战机器学习" 13 | author: "阿越就是我" 14 | date: last-modified 15 | date-format: iso 16 | 17 | page-footer: 18 | left: | 19 | R语言实战机器学习 was written by 阿越. 20 | right: | 21 | 本书由 Quarto 强力驱动. 22 | #cover-image: cover.png 23 | #favicon: cover.png 24 | site-url: https://ayueme.github.io/R_machine_learning/ 25 | repo-url: https://github.com/ayueme/R_machine_learning 26 | repo-branch: main 27 | repo-actions: [edit, issue] 28 | 29 | chapters: 30 | - index.qmd 31 | 32 | - part: "基础知识" 33 | chapters: 34 | - 机器学习简介.qmd 35 | - 数据预处理.qmd 36 | - 数据划分.qmd 37 | - 模型评价.qmd 38 | - 超参数调优简介.qmd 39 | - 变量选择.qmd 40 | 41 | - part: "代码实战" 42 | chapters: 43 | - 数据准备.qmd 44 | - 聚类分析.qmd 45 | - 主成分分析.qmd 46 | - 主成分分析可视化.qmd 47 | - 多元线性回归.qmd 48 | - 逻辑回归.qmd 49 | - glmnet.qmd 50 | - KNN.qmd 51 | - 支持向量机.qmd 52 | - 支持向量机核函数比较.qmd 53 | - 决策树.qmd 54 | - 决策树可视化.qmd 55 | - 集成算法类型.qmd 56 | - 随机森林.qmd 57 | - gbm.qmd 58 | - xgboost.qmd 59 | - lightGBM.qmd 60 | - catboost.qmd 61 | 62 | appendices: 63 | - 9999-appendix.qmd 64 | 65 | format: 66 | html: 67 | theme: cosmo 68 | code-copy: true 69 | pdf: 70 | documentclass: scrbook 71 | toc: true 72 | toc-depth: 2 73 | toc-title: 目录 74 | number-sections: true 75 | number-depth: 3 76 | linkcolor: highlight 77 | colorlinks: true 78 | highlight-style: github 79 | code-block-bg: light 80 | code-block-border-left: false 81 | fontsize: 12pt 82 | mainfont: "SimSun" 83 | monofont: "Noto Sans SC" 84 | sansfont: "Noto Sans SC" 85 | indent: TRUE 86 | #设置4个边距 87 | geometry: 88 | - top=2.5cm 89 | - bottom=2.5cm 90 | - left=2.0cm 91 | - right=2.0cm 92 | - heightrounded 93 | - ignorehead 94 | - ignorefoot 95 | include-in-header: preamble.tex 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /datasets/dca.r: -------------------------------------------------------------------------------- 1 | dca <- function(data, outcome, predictors, xstart=0.01, xstop=0.99, xby=0.01, 2 | ymin=-0.05, probability=NULL, harm=NULL,graph=TRUE, intervention=FALSE, 3 | interventionper=100, smooth=FALSE,loess.span=0.10) { 4 | 5 | # LOADING REQUIRED LIBRARIES 6 | require(stats) 7 | 8 | # data MUST BE A DATA FRAME 9 | if (class(data)!="data.frame") { 10 | stop("Input data must be class data.frame") 11 | } 12 | 13 | #ONLY KEEPING COMPLETE CASES 14 | data=data[complete.cases(data[append(outcome,predictors)]),append(outcome,predictors)] 15 | 16 | # outcome MUST BE CODED AS 0 AND 1 17 | if (max(data[[outcome]])>1 | min(data[[outcome]])<0) { 18 | stop("outcome cannot be less than 0 or greater than 1") 19 | } 20 | # xstart IS BETWEEN 0 AND 1 21 | if (xstart<0 | xstart>1) { 22 | stop("xstart must lie between 0 and 1") 23 | } 24 | 25 | # xstop IS BETWEEN 0 AND 1 26 | if (xstop<0 | xstop>1) { 27 | stop("xstop must lie between 0 and 1") 28 | } 29 | 30 | # xby IS BETWEEN 0 AND 1 31 | if (xby<=0 | xby>=1) { 32 | stop("xby must lie between 0 and 1") 33 | } 34 | 35 | # xstart IS BEFORE xstop 36 | if (xstart>=xstop) { 37 | stop("xstop must be larger than xstart") 38 | } 39 | 40 | #STORING THE NUMBER OF PREDICTORS SPECIFIED 41 | pred.n=length(predictors) 42 | 43 | #IF probability SPECIFIED ENSURING THAT EACH PREDICTOR IS INDICATED AS A YES OR NO 44 | if (length(probability)>0 & pred.n!=length(probability)) { 45 | stop("Number of probabilities specified must be the same as the number of predictors being checked.") 46 | } 47 | 48 | #IF harm SPECIFIED ENSURING THAT EACH PREDICTOR HAS A SPECIFIED HARM 49 | if (length(harm)>0 & pred.n!=length(harm)) { 50 | stop("Number of harms specified must be the same as the number of predictors being checked.") 51 | } 52 | 53 | #INITIALIZING DEFAULT VALUES FOR PROBABILITES AND HARMS IF NOT SPECIFIED 54 | if (length(harm)==0) { 55 | harm=rep(0,pred.n) 56 | } 57 | if (length(probability)==0) { 58 | probability=rep(TRUE,pred.n) 59 | } 60 | 61 | 62 | #CHECKING THAT EACH probability ELEMENT IS EQUAL TO YES OR NO, 63 | #AND CHECKING THAT PROBABILITIES ARE BETWEEN 0 and 1 64 | #IF NOT A PROB THEN CONVERTING WITH A LOGISTIC REGRESSION 65 | for(m in 1:pred.n) { 66 | if (probability[m]!=TRUE & probability[m]!=FALSE) { 67 | stop("Each element of probability vector must be TRUE or FALSE") 68 | } 69 | if (probability[m]==TRUE & (max(data[predictors[m]])>1 | min(data[predictors[m]])<0)) { 70 | stop(paste(predictors[m],"must be between 0 and 1 OR sepcified as a non-probability in the probability option",sep=" ")) 71 | } 72 | if(probability[m]==FALSE) { 73 | model=NULL 74 | pred=NULL 75 | model=glm(data.matrix(data[outcome]) ~ data.matrix(data[predictors[m]]), family=binomial("logit")) 76 | pred=data.frame(model$fitted.values) 77 | pred=data.frame(pred) 78 | names(pred)=predictors[m] 79 | data=cbind(data[names(data)!=predictors[m]],pred) 80 | print(paste(predictors[m],"converted to a probability with logistic regression. Due to linearity assumption, miscalibration may occur.",sep=" ")) 81 | } 82 | } 83 | 84 | # THE PREDICTOR NAMES CANNOT BE EQUAL TO all OR none. 85 | if (length(predictors[predictors=="all" | predictors=="none"])) { 86 | stop("Prediction names cannot be equal to all or none.") 87 | } 88 | 89 | ######### CALCULATING NET BENEFIT ######### 90 | N=dim(data)[1] 91 | event.rate=colMeans(data[outcome]) 92 | 93 | # CREATING DATAFRAME THAT IS ONE LINE PER THRESHOLD PER all AND none STRATEGY 94 | nb=data.frame(seq(from=xstart, to=xstop, by=xby)) 95 | names(nb)="threshold" 96 | interv=nb 97 | 98 | nb["all"]=event.rate - (1-event.rate)*nb$threshold/(1-nb$threshold) 99 | nb["none"]=0 100 | 101 | # CYCLING THROUGH EACH PREDICTOR AND CALCULATING NET BENEFIT 102 | for(m in 1:pred.n){ 103 | for(t in 1:length(nb$threshold)){ 104 | # COUNTING TRUE POSITIVES AT EACH THRESHOLD 105 | tp=mean(data[data[[predictors[m]]]>=nb$threshold[t],outcome])*sum(data[[predictors[m]]]>=nb$threshold[t]) 106 | # COUNTING FALSE POSITIVES AT EACH THRESHOLD 107 | fp=(1-mean(data[data[[predictors[m]]]>=nb$threshold[t],outcome]))*sum(data[[predictors[m]]]>=nb$threshold[t]) 108 | #setting TP and FP to 0 if no observations meet threshold prob. 109 | if (sum(data[[predictors[m]]]>=nb$threshold[t])==0) { 110 | tp=0 111 | fp=0 112 | } 113 | 114 | # CALCULATING NET BENEFIT 115 | nb[t,predictors[m]]=tp/N - fp/N*(nb$threshold[t]/(1-nb$threshold[t])) - harm[m] 116 | } 117 | interv[predictors[m]]=(nb[predictors[m]] - nb["all"])*interventionper/(interv$threshold/(1-interv$threshold)) 118 | } 119 | 120 | # CYCLING THROUGH EACH PREDICTOR AND SMOOTH NET BENEFIT AND INTERVENTIONS AVOIDED 121 | for(m in 1:pred.n) { 122 | if (smooth==TRUE){ 123 | lws=loess(data.matrix(nb[!is.na(nb[[predictors[m]]]),predictors[m]]) ~ data.matrix(nb[!is.na(nb[[predictors[m]]]),"threshold"]),span=loess.span) 124 | nb[!is.na(nb[[predictors[m]]]),paste(predictors[m],"_sm",sep="")]=lws$fitted 125 | 126 | lws=loess(data.matrix(interv[!is.na(nb[[predictors[m]]]),predictors[m]]) ~ data.matrix(interv[!is.na(nb[[predictors[m]]]),"threshold"]),span=loess.span) 127 | interv[!is.na(nb[[predictors[m]]]),paste(predictors[m],"_sm",sep="")]=lws$fitted 128 | } 129 | } 130 | 131 | # PLOTTING GRAPH IF REQUESTED 132 | if (graph==TRUE) { 133 | require(graphics) 134 | 135 | # PLOTTING INTERVENTIONS AVOIDED IF REQUESTED 136 | if(intervention==TRUE) { 137 | # initialize the legend label, color, and width using the standard specs of the none and all lines 138 | legendlabel <- NULL 139 | legendcolor <- NULL 140 | legendwidth <- NULL 141 | legendpattern <- NULL 142 | 143 | #getting maximum number of avoided interventions 144 | ymax=max(interv[predictors],na.rm = TRUE) 145 | 146 | #INITIALIZING EMPTY PLOT WITH LABELS 147 | plot(x=nb$threshold, y=nb$all, type="n" ,xlim=c(xstart, xstop), ylim=c(ymin, ymax), xlab="Threshold probability", ylab=paste("Net reduction in interventions per",interventionper,"patients")) 148 | 149 | #PLOTTING INTERVENTIONS AVOIDED FOR EACH PREDICTOR 150 | for(m in 1:pred.n) { 151 | if (smooth==TRUE){ 152 | lines(interv$threshold,data.matrix(interv[paste(predictors[m],"_sm",sep="")]),col=m,lty=2) 153 | } else { 154 | lines(interv$threshold,data.matrix(interv[predictors[m]]),col=m,lty=2) 155 | } 156 | 157 | # adding each model to the legend 158 | legendlabel <- c(legendlabel, predictors[m]) 159 | legendcolor <- c(legendcolor, m) 160 | legendwidth <- c(legendwidth, 1) 161 | legendpattern <- c(legendpattern, 2) 162 | } 163 | } else { 164 | # PLOTTING NET BENEFIT IF REQUESTED 165 | 166 | # initialize the legend label, color, and width using the standard specs of the none and all lines 167 | legendlabel <- c("None", "All") 168 | legendcolor <- c(17, 8) 169 | legendwidth <- c(2, 2) 170 | legendpattern <- c(1, 1) 171 | 172 | #getting maximum net benefit 173 | ymax=max(nb[names(nb)!="threshold"],na.rm = TRUE) 174 | 175 | # inializing new benfit plot with treat all option 176 | plot(x=nb$threshold, y=nb$all, type="l", col=8, lwd=2 ,xlim=c(xstart, xstop), ylim=c(ymin, ymax), xlab="Threshold probability", ylab="Net benefit") 177 | # adding treat none option 178 | lines(x=nb$threshold, y=nb$none,lwd=2) 179 | #PLOTTING net benefit FOR EACH PREDICTOR 180 | for(m in 1:pred.n) { 181 | if (smooth==TRUE){ 182 | lines(nb$threshold,data.matrix(nb[paste(predictors[m],"_sm",sep="")]),col=m,lty=2) 183 | } else { 184 | lines(nb$threshold,data.matrix(nb[predictors[m]]),col=m,lty=2) 185 | } 186 | # adding each model to the legend 187 | legendlabel <- c(legendlabel, predictors[m]) 188 | legendcolor <- c(legendcolor, m) 189 | legendwidth <- c(legendwidth, 1) 190 | legendpattern <- c(legendpattern, 2) 191 | } 192 | } 193 | # then add the legend 194 | legend("topright", legendlabel, cex=0.8, col=legendcolor, lwd=legendwidth, lty=legendpattern) 195 | 196 | } 197 | 198 | #RETURNING RESULTS 199 | results=list() 200 | results$N=N 201 | results$predictors=data.frame(cbind(predictors,harm,probability)) 202 | names(results$predictors)=c("predictor","harm.applied","probability") 203 | results$interventions.avoided.per=interventionper 204 | results$net.benefit=nb 205 | results$interventions.avoided=interv 206 | #return(results) 207 | return(results) 208 | 209 | } 210 | 211 | 212 | 213 | -------------------------------------------------------------------------------- /datasets/hotels_df.rdata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/datasets/hotels_df.rdata -------------------------------------------------------------------------------- /datasets/pimadiabetes.rdata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/datasets/pimadiabetes.rdata -------------------------------------------------------------------------------- /datasets/tune_res.rdata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/datasets/tune_res.rdata -------------------------------------------------------------------------------- /datasets/例16-02.sav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/datasets/例16-02.sav -------------------------------------------------------------------------------- /datasets/例16-03.sav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/datasets/例16-03.sav -------------------------------------------------------------------------------- /datasets/例16-04.csv: -------------------------------------------------------------------------------- 1 | X1,X2,Y 2 | 0,0,1 3 | 0,0,1 4 | 0,0,1 5 | 0,0,1 6 | 0,0,1 7 | 0,0,1 8 | 0,0,1 9 | 0,0,1 10 | 0,0,1 11 | 0,0,1 12 | 0,0,3 13 | 0,1,1 14 | 0,1,1 15 | 0,1,1 16 | 0,1,1 17 | 0,1,1 18 | 0,1,1 19 | 0,1,1 20 | 0,1,2 21 | 0,1,2 22 | 0,1,3 23 | 0,1,3 24 | 0,1,3 25 | 0,1,3 26 | 0,1,3 27 | 1,0,1 28 | 1,0,1 29 | 1,0,1 30 | 1,0,1 31 | 1,0,1 32 | 1,0,1 33 | 1,0,1 34 | 1,0,1 35 | 1,0,1 36 | 1,0,1 37 | 1,0,1 38 | 1,0,1 39 | 1,0,1 40 | 1,0,1 41 | 1,0,1 42 | 1,0,1 43 | 1,0,1 44 | 1,0,1 45 | 1,0,1 46 | 1,0,2 47 | 1,0,2 48 | 1,0,2 49 | 1,0,2 50 | 1,0,2 51 | 1,0,2 52 | 1,0,2 53 | 1,0,3 54 | 1,0,3 55 | 1,0,3 56 | 1,0,3 57 | 1,0,3 58 | 1,0,3 59 | 1,1,1 60 | 1,1,1 61 | 1,1,1 62 | 1,1,1 63 | 1,1,1 64 | 1,1,1 65 | 1,1,2 66 | 1,1,2 67 | 1,1,2 68 | 1,1,2 69 | 1,1,2 70 | 1,1,3 71 | 1,1,3 72 | 1,1,3 73 | 1,1,3 74 | 1,1,3 75 | 1,1,3 76 | 1,1,3 77 | 1,1,3 78 | 1,1,3 79 | 1,1,3 80 | 1,1,3 81 | 1,1,3 82 | 1,1,3 83 | 1,1,3 84 | 1,1,3 85 | 1,1,3 86 | -------------------------------------------------------------------------------- /datasets/例16-05.csv: -------------------------------------------------------------------------------- 1 | X1,X2,Y 2 | 0,0,1 3 | 0,0,1 4 | 0,0,1 5 | 0,0,1 6 | 0,0,1 7 | 0,0,1 8 | 0,0,1 9 | 0,0,1 10 | 0,0,1 11 | 0,0,1 12 | 0,0,1 13 | 0,0,1 14 | 0,0,1 15 | 0,0,1 16 | 0,0,1 17 | 0,0,1 18 | 0,0,1 19 | 0,0,1 20 | 0,0,1 21 | 0,0,1 22 | 0,0,2 23 | 0,0,2 24 | 0,0,2 25 | 0,0,2 26 | 0,0,2 27 | 0,0,2 28 | 0,0,2 29 | 0,0,2 30 | 0,0,2 31 | 0,0,2 32 | 0,0,2 33 | 0,0,2 34 | 0,0,2 35 | 0,0,2 36 | 0,0,2 37 | 0,0,2 38 | 0,0,2 39 | 0,0,2 40 | 0,0,2 41 | 0,0,2 42 | 0,0,2 43 | 0,0,2 44 | 0,0,2 45 | 0,0,2 46 | 0,0,2 47 | 0,0,2 48 | 0,0,2 49 | 0,0,2 50 | 0,0,2 51 | 0,0,2 52 | 0,0,2 53 | 0,0,2 54 | 0,0,2 55 | 0,0,2 56 | 0,0,2 57 | 0,0,3 58 | 0,0,3 59 | 0,0,3 60 | 0,0,3 61 | 0,0,3 62 | 0,0,3 63 | 0,0,3 64 | 0,0,3 65 | 0,0,3 66 | 0,0,3 67 | 0,0,3 68 | 0,0,3 69 | 0,0,3 70 | 0,0,3 71 | 0,0,3 72 | 0,0,3 73 | 0,0,3 74 | 0,0,3 75 | 0,0,3 76 | 0,0,3 77 | 0,0,3 78 | 0,0,3 79 | 0,0,3 80 | 0,0,3 81 | 0,0,3 82 | 0,0,3 83 | 0,1,1 84 | 0,1,1 85 | 0,1,1 86 | 0,1,1 87 | 0,1,1 88 | 0,1,1 89 | 0,1,1 90 | 0,1,1 91 | 0,1,1 92 | 0,1,1 93 | 0,1,2 94 | 0,1,2 95 | 0,1,2 96 | 0,1,2 97 | 0,1,2 98 | 0,1,2 99 | 0,1,2 100 | 0,1,2 101 | 0,1,2 102 | 0,1,2 103 | 0,1,2 104 | 0,1,2 105 | 0,1,2 106 | 0,1,2 107 | 0,1,2 108 | 0,1,2 109 | 0,1,2 110 | 0,1,2 111 | 0,1,2 112 | 0,1,2 113 | 0,1,2 114 | 0,1,2 115 | 0,1,2 116 | 0,1,2 117 | 0,1,2 118 | 0,1,2 119 | 0,1,2 120 | 0,1,3 121 | 0,1,3 122 | 0,1,3 123 | 0,1,3 124 | 0,1,3 125 | 0,1,3 126 | 0,1,3 127 | 0,1,3 128 | 0,1,3 129 | 0,1,3 130 | 0,1,3 131 | 0,1,3 132 | 0,1,3 133 | 0,1,3 134 | 0,1,3 135 | 0,1,3 136 | 0,1,3 137 | 0,1,3 138 | 0,1,3 139 | 0,1,3 140 | 0,1,3 141 | 0,1,3 142 | 0,1,3 143 | 0,1,3 144 | 0,1,3 145 | 0,1,3 146 | 0,1,3 147 | 0,1,3 148 | 0,1,3 149 | 0,1,3 150 | 0,1,3 151 | 0,1,3 152 | 0,1,3 153 | 0,1,3 154 | 0,1,3 155 | 0,1,3 156 | 0,1,3 157 | 0,1,3 158 | 0,1,3 159 | 0,1,3 160 | 0,1,3 161 | 0,1,3 162 | 0,1,3 163 | 0,1,3 164 | 0,1,3 165 | 0,1,3 166 | 0,1,3 167 | 0,1,3 168 | 0,1,3 169 | 0,1,3 170 | 0,1,3 171 | 0,1,3 172 | 0,1,3 173 | 0,1,3 174 | 0,1,3 175 | 0,1,3 176 | 0,1,3 177 | 1,0,1 178 | 1,0,1 179 | 1,0,1 180 | 1,0,1 181 | 1,0,1 182 | 1,0,1 183 | 1,0,1 184 | 1,0,1 185 | 1,0,1 186 | 1,0,1 187 | 1,0,1 188 | 1,0,1 189 | 1,0,1 190 | 1,0,1 191 | 1,0,1 192 | 1,0,1 193 | 1,0,1 194 | 1,0,1 195 | 1,0,1 196 | 1,0,1 197 | 1,0,1 198 | 1,0,1 199 | 1,0,1 200 | 1,0,1 201 | 1,0,1 202 | 1,0,1 203 | 1,0,1 204 | 1,0,1 205 | 1,0,1 206 | 1,0,1 207 | 1,0,1 208 | 1,0,1 209 | 1,0,1 210 | 1,0,1 211 | 1,0,1 212 | 1,0,1 213 | 1,0,1 214 | 1,0,1 215 | 1,0,1 216 | 1,0,1 217 | 1,0,1 218 | 1,0,1 219 | 1,0,2 220 | 1,0,2 221 | 1,0,2 222 | 1,0,2 223 | 1,0,2 224 | 1,0,2 225 | 1,0,2 226 | 1,0,2 227 | 1,0,2 228 | 1,0,2 229 | 1,0,2 230 | 1,0,2 231 | 1,0,2 232 | 1,0,2 233 | 1,0,2 234 | 1,0,2 235 | 1,0,2 236 | 1,0,3 237 | 1,0,3 238 | 1,0,3 239 | 1,0,3 240 | 1,0,3 241 | 1,0,3 242 | 1,0,3 243 | 1,0,3 244 | 1,0,3 245 | 1,0,3 246 | 1,0,3 247 | 1,0,3 248 | 1,0,3 249 | 1,0,3 250 | 1,0,3 251 | 1,0,3 252 | 1,0,3 253 | 1,0,3 254 | 1,0,3 255 | 1,0,3 256 | 1,0,3 257 | 1,0,3 258 | 1,0,3 259 | 1,0,3 260 | 1,0,3 261 | 1,0,3 262 | 1,1,1 263 | 1,1,1 264 | 1,1,1 265 | 1,1,1 266 | 1,1,1 267 | 1,1,1 268 | 1,1,1 269 | 1,1,1 270 | 1,1,1 271 | 1,1,1 272 | 1,1,1 273 | 1,1,1 274 | 1,1,1 275 | 1,1,1 276 | 1,1,1 277 | 1,1,1 278 | 1,1,2 279 | 1,1,2 280 | 1,1,2 281 | 1,1,2 282 | 1,1,2 283 | 1,1,2 284 | 1,1,2 285 | 1,1,2 286 | 1,1,2 287 | 1,1,2 288 | 1,1,2 289 | 1,1,2 290 | 1,1,3 291 | 1,1,3 292 | 1,1,3 293 | 1,1,3 294 | 1,1,3 295 | 1,1,3 296 | 1,1,3 297 | 1,1,3 298 | 1,1,3 299 | 1,1,3 300 | 1,1,3 301 | 1,1,3 302 | 1,1,3 303 | 1,1,3 304 | 1,1,3 305 | 1,1,3 306 | 1,1,3 307 | 1,1,3 308 | 1,1,3 309 | 1,1,3 310 | 1,1,3 311 | 1,1,3 312 | 1,1,3 313 | 1,1,3 314 | 1,1,3 315 | 1,1,3 316 | -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-20-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-20-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/KNN_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/KNN_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-17-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-17-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-18-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-18-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-19-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-19-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-20-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-20-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-html/unnamed-chunk-22-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-html/unnamed-chunk-22-1.png -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-13-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-13-1.pdf -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-17-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-17-1.pdf -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-18-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-18-1.pdf -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-19-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-19-1.pdf -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-20-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-20-1.pdf -------------------------------------------------------------------------------- /docs/catboost_files/figure-pdf/unnamed-chunk-22-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/catboost_files/figure-pdf/unnamed-chunk-22-1.pdf -------------------------------------------------------------------------------- /docs/figs/46346465dfgdfgd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/46346465dfgdfgd.jpg -------------------------------------------------------------------------------- /docs/figs/6325461.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/6325461.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-22_15-54-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-22_15-54-53.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-22_16-05-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-22_16-05-22.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-26_20-06-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-26_20-06-48.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-27_13-20-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-27_13-20-37.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-27_19-11-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-27_19-11-28.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-27_19-52-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-27_19-52-48.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-27_20-19-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-27_20-19-25.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-28_10-41-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-28_10-41-44.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-28_12-44-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-28_12-44-41.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-28_12-56-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-28_12-56-47.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-30_20-18-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-30_20-18-13.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-04-30_20-19-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-04-30_20-19-09.png -------------------------------------------------------------------------------- /docs/figs/PixPin_2024-05-05_19-41-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/PixPin_2024-05-05_19-41-50.png -------------------------------------------------------------------------------- /docs/figs/Snipaste_2023-04-01_14-12-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/Snipaste_2023-04-01_14-12-58.png -------------------------------------------------------------------------------- /docs/figs/Snipaste_2023-04-05_16-05-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/Snipaste_2023-04-05_16-05-01.png -------------------------------------------------------------------------------- /docs/figs/Snipaste_2023-04-05_16-07-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/Snipaste_2023-04-05_16-07-01.png -------------------------------------------------------------------------------- /docs/figs/Snipaste_2023-06-12_15-40-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/Snipaste_2023-06-12_15-40-00.png -------------------------------------------------------------------------------- /docs/figs/模型复杂度和泛化误差.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/figs/模型复杂度和泛化误差.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-15-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-15-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-18-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-18-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/gbm_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/gbm_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-18-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-18-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-29-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-29-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-31-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-31-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-45-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-45-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-47-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-47-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-49-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-49-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-50-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-50-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/glmnet_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/glmnet_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/robots.txt: -------------------------------------------------------------------------------- 1 | Sitemap: https://ayueme.github.io/R_machine_learning/sitemap.xml 2 | -------------------------------------------------------------------------------- /docs/site_libs/DiagrammeR-styles-0.2/styles.css: -------------------------------------------------------------------------------- 1 | .DiagrammeR,.grViz pre { 2 | white-space: pre-wrap; /* CSS 3 */ 3 | white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ 4 | white-space: -pre-wrap; /* Opera 4-6 */ 5 | white-space: -o-pre-wrap; /* Opera 7 */ 6 | word-wrap: break-word; /* Internet Explorer 5.5+ */ 7 | } 8 | 9 | .DiagrammeR g .label { 10 | font-family: Helvetica; 11 | font-size: 14px; 12 | color: #333333; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /docs/site_libs/bootstrap/bootstrap-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/site_libs/bootstrap/bootstrap-icons.woff -------------------------------------------------------------------------------- /docs/site_libs/clipboard/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.11 3 | * https://clipboardjs.com/ 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); 9 | // @license-end -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/popper.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @popperjs/core v2.11.7 - MIT License 3 | */ 4 | 5 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); 6 | 7 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/quarto-syntax-highlighting.css: -------------------------------------------------------------------------------- 1 | /* quarto syntax highlight colors */ 2 | :root { 3 | --quarto-hl-ot-color: #003B4F; 4 | --quarto-hl-at-color: #657422; 5 | --quarto-hl-ss-color: #20794D; 6 | --quarto-hl-an-color: #5E5E5E; 7 | --quarto-hl-fu-color: #4758AB; 8 | --quarto-hl-st-color: #20794D; 9 | --quarto-hl-cf-color: #003B4F; 10 | --quarto-hl-op-color: #5E5E5E; 11 | --quarto-hl-er-color: #AD0000; 12 | --quarto-hl-bn-color: #AD0000; 13 | --quarto-hl-al-color: #AD0000; 14 | --quarto-hl-va-color: #111111; 15 | --quarto-hl-bu-color: inherit; 16 | --quarto-hl-ex-color: inherit; 17 | --quarto-hl-pp-color: #AD0000; 18 | --quarto-hl-in-color: #5E5E5E; 19 | --quarto-hl-vs-color: #20794D; 20 | --quarto-hl-wa-color: #5E5E5E; 21 | --quarto-hl-do-color: #5E5E5E; 22 | --quarto-hl-im-color: #00769E; 23 | --quarto-hl-ch-color: #20794D; 24 | --quarto-hl-dt-color: #AD0000; 25 | --quarto-hl-fl-color: #AD0000; 26 | --quarto-hl-co-color: #5E5E5E; 27 | --quarto-hl-cv-color: #5E5E5E; 28 | --quarto-hl-cn-color: #8f5902; 29 | --quarto-hl-sc-color: #5E5E5E; 30 | --quarto-hl-dv-color: #AD0000; 31 | --quarto-hl-kw-color: #003B4F; 32 | } 33 | 34 | /* other quarto variables */ 35 | :root { 36 | --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 37 | } 38 | 39 | pre > code.sourceCode > span { 40 | color: #003B4F; 41 | } 42 | 43 | code span { 44 | color: #003B4F; 45 | } 46 | 47 | code.sourceCode > span { 48 | color: #003B4F; 49 | } 50 | 51 | div.sourceCode, 52 | div.sourceCode pre.sourceCode { 53 | color: #003B4F; 54 | } 55 | 56 | code span.ot { 57 | color: #003B4F; 58 | font-style: inherit; 59 | } 60 | 61 | code span.at { 62 | color: #657422; 63 | font-style: inherit; 64 | } 65 | 66 | code span.ss { 67 | color: #20794D; 68 | font-style: inherit; 69 | } 70 | 71 | code span.an { 72 | color: #5E5E5E; 73 | font-style: inherit; 74 | } 75 | 76 | code span.fu { 77 | color: #4758AB; 78 | font-style: inherit; 79 | } 80 | 81 | code span.st { 82 | color: #20794D; 83 | font-style: inherit; 84 | } 85 | 86 | code span.cf { 87 | color: #003B4F; 88 | font-style: inherit; 89 | } 90 | 91 | code span.op { 92 | color: #5E5E5E; 93 | font-style: inherit; 94 | } 95 | 96 | code span.er { 97 | color: #AD0000; 98 | font-style: inherit; 99 | } 100 | 101 | code span.bn { 102 | color: #AD0000; 103 | font-style: inherit; 104 | } 105 | 106 | code span.al { 107 | color: #AD0000; 108 | font-style: inherit; 109 | } 110 | 111 | code span.va { 112 | color: #111111; 113 | font-style: inherit; 114 | } 115 | 116 | code span.bu { 117 | font-style: inherit; 118 | } 119 | 120 | code span.ex { 121 | font-style: inherit; 122 | } 123 | 124 | code span.pp { 125 | color: #AD0000; 126 | font-style: inherit; 127 | } 128 | 129 | code span.in { 130 | color: #5E5E5E; 131 | font-style: inherit; 132 | } 133 | 134 | code span.vs { 135 | color: #20794D; 136 | font-style: inherit; 137 | } 138 | 139 | code span.wa { 140 | color: #5E5E5E; 141 | font-style: italic; 142 | } 143 | 144 | code span.do { 145 | color: #5E5E5E; 146 | font-style: italic; 147 | } 148 | 149 | code span.im { 150 | color: #00769E; 151 | font-style: inherit; 152 | } 153 | 154 | code span.ch { 155 | color: #20794D; 156 | font-style: inherit; 157 | } 158 | 159 | code span.dt { 160 | color: #AD0000; 161 | font-style: inherit; 162 | } 163 | 164 | code span.fl { 165 | color: #AD0000; 166 | font-style: inherit; 167 | } 168 | 169 | code span.co { 170 | color: #5E5E5E; 171 | font-style: inherit; 172 | } 173 | 174 | code span.cv { 175 | color: #5E5E5E; 176 | font-style: italic; 177 | } 178 | 179 | code span.cn { 180 | color: #8f5902; 181 | font-style: inherit; 182 | } 183 | 184 | code span.sc { 185 | color: #5E5E5E; 186 | font-style: inherit; 187 | } 188 | 189 | code span.dv { 190 | color: #AD0000; 191 | font-style: inherit; 192 | } 193 | 194 | code span.kw { 195 | color: #003B4F; 196 | font-style: inherit; 197 | } 198 | 199 | .prevent-inlining { 200 | content: " { 9 | // Find any conflicting margin elements and add margins to the 10 | // top to prevent overlap 11 | const marginChildren = window.document.querySelectorAll( 12 | ".column-margin.column-container > *, .margin-caption, .aside" 13 | ); 14 | 15 | let lastBottom = 0; 16 | for (const marginChild of marginChildren) { 17 | if (marginChild.offsetParent !== null) { 18 | // clear the top margin so we recompute it 19 | marginChild.style.marginTop = null; 20 | const top = marginChild.getBoundingClientRect().top + window.scrollY; 21 | if (top < lastBottom) { 22 | const marginChildStyle = window.getComputedStyle(marginChild); 23 | const marginBottom = parseFloat(marginChildStyle["marginBottom"]); 24 | const margin = lastBottom - top + marginBottom; 25 | marginChild.style.marginTop = `${margin}px`; 26 | } 27 | const styles = window.getComputedStyle(marginChild); 28 | const marginTop = parseFloat(styles["marginTop"]); 29 | lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; 30 | } 31 | } 32 | }; 33 | 34 | window.document.addEventListener("DOMContentLoaded", function (_event) { 35 | // Recompute the position of margin elements anytime the body size changes 36 | if (window.ResizeObserver) { 37 | const resizeObserver = new window.ResizeObserver( 38 | throttle(() => { 39 | layoutMarginEls(); 40 | if ( 41 | window.document.body.getBoundingClientRect().width < 990 && 42 | isReaderMode() 43 | ) { 44 | quartoToggleReader(); 45 | } 46 | }, 50) 47 | ); 48 | resizeObserver.observe(window.document.body); 49 | } 50 | 51 | const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); 52 | const sidebarEl = window.document.getElementById("quarto-sidebar"); 53 | const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); 54 | const marginSidebarEl = window.document.getElementById( 55 | "quarto-margin-sidebar" 56 | ); 57 | // function to determine whether the element has a previous sibling that is active 58 | const prevSiblingIsActiveLink = (el) => { 59 | const sibling = el.previousElementSibling; 60 | if (sibling && sibling.tagName === "A") { 61 | return sibling.classList.contains("active"); 62 | } else { 63 | return false; 64 | } 65 | }; 66 | 67 | // fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior) 68 | function fireSlideEnter(e) { 69 | const event = window.document.createEvent("Event"); 70 | event.initEvent("slideenter", true, true); 71 | window.document.dispatchEvent(event); 72 | } 73 | const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); 74 | tabs.forEach((tab) => { 75 | tab.addEventListener("shown.bs.tab", fireSlideEnter); 76 | }); 77 | 78 | // fire slideEnter for tabby tab activations (for htmlwidget resize behavior) 79 | document.addEventListener("tabby", fireSlideEnter, false); 80 | 81 | // Track scrolling and mark TOC links as active 82 | // get table of contents and sidebar (bail if we don't have at least one) 83 | const tocLinks = tocEl 84 | ? [...tocEl.querySelectorAll("a[data-scroll-target]")] 85 | : []; 86 | const makeActive = (link) => tocLinks[link].classList.add("active"); 87 | const removeActive = (link) => tocLinks[link].classList.remove("active"); 88 | const removeAllActive = () => 89 | [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); 90 | 91 | // activate the anchor for a section associated with this TOC entry 92 | tocLinks.forEach((link) => { 93 | link.addEventListener("click", () => { 94 | if (link.href.indexOf("#") !== -1) { 95 | const anchor = link.href.split("#")[1]; 96 | const heading = window.document.querySelector( 97 | `[data-anchor-id=${anchor}]` 98 | ); 99 | if (heading) { 100 | // Add the class 101 | heading.classList.add("reveal-anchorjs-link"); 102 | 103 | // function to show the anchor 104 | const handleMouseout = () => { 105 | heading.classList.remove("reveal-anchorjs-link"); 106 | heading.removeEventListener("mouseout", handleMouseout); 107 | }; 108 | 109 | // add a function to clear the anchor when the user mouses out of it 110 | heading.addEventListener("mouseout", handleMouseout); 111 | } 112 | } 113 | }); 114 | }); 115 | 116 | const sections = tocLinks.map((link) => { 117 | const target = link.getAttribute("data-scroll-target"); 118 | if (target.startsWith("#")) { 119 | return window.document.getElementById(decodeURI(`${target.slice(1)}`)); 120 | } else { 121 | return window.document.querySelector(decodeURI(`${target}`)); 122 | } 123 | }); 124 | 125 | const sectionMargin = 200; 126 | let currentActive = 0; 127 | // track whether we've initialized state the first time 128 | let init = false; 129 | 130 | const updateActiveLink = () => { 131 | // The index from bottom to top (e.g. reversed list) 132 | let sectionIndex = -1; 133 | if ( 134 | window.innerHeight + window.pageYOffset >= 135 | window.document.body.offsetHeight 136 | ) { 137 | sectionIndex = 0; 138 | } else { 139 | sectionIndex = [...sections].reverse().findIndex((section) => { 140 | if (section) { 141 | return window.pageYOffset >= section.offsetTop - sectionMargin; 142 | } else { 143 | return false; 144 | } 145 | }); 146 | } 147 | if (sectionIndex > -1) { 148 | const current = sections.length - sectionIndex - 1; 149 | if (current !== currentActive) { 150 | removeAllActive(); 151 | currentActive = current; 152 | makeActive(current); 153 | if (init) { 154 | window.dispatchEvent(sectionChanged); 155 | } 156 | init = true; 157 | } 158 | } 159 | }; 160 | 161 | const inHiddenRegion = (top, bottom, hiddenRegions) => { 162 | for (const region of hiddenRegions) { 163 | if (top <= region.bottom && bottom >= region.top) { 164 | return true; 165 | } 166 | } 167 | return false; 168 | }; 169 | 170 | const categorySelector = "header.quarto-title-block .quarto-category"; 171 | const activateCategories = (href) => { 172 | // Find any categories 173 | // Surround them with a link pointing back to: 174 | // #category=Authoring 175 | try { 176 | const categoryEls = window.document.querySelectorAll(categorySelector); 177 | for (const categoryEl of categoryEls) { 178 | const categoryText = categoryEl.textContent; 179 | if (categoryText) { 180 | const link = `${href}#category=${encodeURIComponent(categoryText)}`; 181 | const linkEl = window.document.createElement("a"); 182 | linkEl.setAttribute("href", link); 183 | for (const child of categoryEl.childNodes) { 184 | linkEl.append(child); 185 | } 186 | categoryEl.appendChild(linkEl); 187 | } 188 | } 189 | } catch { 190 | // Ignore errors 191 | } 192 | }; 193 | function hasTitleCategories() { 194 | return window.document.querySelector(categorySelector) !== null; 195 | } 196 | 197 | function offsetRelativeUrl(url) { 198 | const offset = getMeta("quarto:offset"); 199 | return offset ? offset + url : url; 200 | } 201 | 202 | function offsetAbsoluteUrl(url) { 203 | const offset = getMeta("quarto:offset"); 204 | const baseUrl = new URL(offset, window.location); 205 | 206 | const projRelativeUrl = url.replace(baseUrl, ""); 207 | if (projRelativeUrl.startsWith("/")) { 208 | return projRelativeUrl; 209 | } else { 210 | return "/" + projRelativeUrl; 211 | } 212 | } 213 | 214 | // read a meta tag value 215 | function getMeta(metaName) { 216 | const metas = window.document.getElementsByTagName("meta"); 217 | for (let i = 0; i < metas.length; i++) { 218 | if (metas[i].getAttribute("name") === metaName) { 219 | return metas[i].getAttribute("content"); 220 | } 221 | } 222 | return ""; 223 | } 224 | 225 | async function findAndActivateCategories() { 226 | const currentPagePath = offsetAbsoluteUrl(window.location.href); 227 | const response = await fetch(offsetRelativeUrl("listings.json")); 228 | if (response.status == 200) { 229 | return response.json().then(function (listingPaths) { 230 | const listingHrefs = []; 231 | for (const listingPath of listingPaths) { 232 | const pathWithoutLeadingSlash = listingPath.listing.substring(1); 233 | for (const item of listingPath.items) { 234 | if ( 235 | item === currentPagePath || 236 | item === currentPagePath + "index.html" 237 | ) { 238 | // Resolve this path against the offset to be sure 239 | // we already are using the correct path to the listing 240 | // (this adjusts the listing urls to be rooted against 241 | // whatever root the page is actually running against) 242 | const relative = offsetRelativeUrl(pathWithoutLeadingSlash); 243 | const baseUrl = window.location; 244 | const resolvedPath = new URL(relative, baseUrl); 245 | listingHrefs.push(resolvedPath.pathname); 246 | break; 247 | } 248 | } 249 | } 250 | 251 | // Look up the tree for a nearby linting and use that if we find one 252 | const nearestListing = findNearestParentListing( 253 | offsetAbsoluteUrl(window.location.pathname), 254 | listingHrefs 255 | ); 256 | if (nearestListing) { 257 | activateCategories(nearestListing); 258 | } else { 259 | // See if the referrer is a listing page for this item 260 | const referredRelativePath = offsetAbsoluteUrl(document.referrer); 261 | const referrerListing = listingHrefs.find((listingHref) => { 262 | const isListingReferrer = 263 | listingHref === referredRelativePath || 264 | listingHref === referredRelativePath + "index.html"; 265 | return isListingReferrer; 266 | }); 267 | 268 | if (referrerListing) { 269 | // Try to use the referrer if possible 270 | activateCategories(referrerListing); 271 | } else if (listingHrefs.length > 0) { 272 | // Otherwise, just fall back to the first listing 273 | activateCategories(listingHrefs[0]); 274 | } 275 | } 276 | }); 277 | } 278 | } 279 | if (hasTitleCategories()) { 280 | findAndActivateCategories(); 281 | } 282 | 283 | const findNearestParentListing = (href, listingHrefs) => { 284 | if (!href || !listingHrefs) { 285 | return undefined; 286 | } 287 | // Look up the tree for a nearby linting and use that if we find one 288 | const relativeParts = href.substring(1).split("/"); 289 | while (relativeParts.length > 0) { 290 | const path = relativeParts.join("/"); 291 | for (const listingHref of listingHrefs) { 292 | if (listingHref.startsWith(path)) { 293 | return listingHref; 294 | } 295 | } 296 | relativeParts.pop(); 297 | } 298 | 299 | return undefined; 300 | }; 301 | 302 | const manageSidebarVisiblity = (el, placeholderDescriptor) => { 303 | let isVisible = true; 304 | let elRect; 305 | 306 | return (hiddenRegions) => { 307 | if (el === null) { 308 | return; 309 | } 310 | 311 | // Find the last element of the TOC 312 | const lastChildEl = el.lastElementChild; 313 | 314 | if (lastChildEl) { 315 | // Converts the sidebar to a menu 316 | const convertToMenu = () => { 317 | for (const child of el.children) { 318 | child.style.opacity = 0; 319 | child.style.overflow = "hidden"; 320 | } 321 | 322 | nexttick(() => { 323 | const toggleContainer = window.document.createElement("div"); 324 | toggleContainer.style.width = "100%"; 325 | toggleContainer.classList.add("zindex-over-content"); 326 | toggleContainer.classList.add("quarto-sidebar-toggle"); 327 | toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom 328 | toggleContainer.id = placeholderDescriptor.id; 329 | toggleContainer.style.position = "fixed"; 330 | 331 | const toggleIcon = window.document.createElement("i"); 332 | toggleIcon.classList.add("quarto-sidebar-toggle-icon"); 333 | toggleIcon.classList.add("bi"); 334 | toggleIcon.classList.add("bi-caret-down-fill"); 335 | 336 | const toggleTitle = window.document.createElement("div"); 337 | const titleEl = window.document.body.querySelector( 338 | placeholderDescriptor.titleSelector 339 | ); 340 | if (titleEl) { 341 | toggleTitle.append( 342 | titleEl.textContent || titleEl.innerText, 343 | toggleIcon 344 | ); 345 | } 346 | toggleTitle.classList.add("zindex-over-content"); 347 | toggleTitle.classList.add("quarto-sidebar-toggle-title"); 348 | toggleContainer.append(toggleTitle); 349 | 350 | const toggleContents = window.document.createElement("div"); 351 | toggleContents.classList = el.classList; 352 | toggleContents.classList.add("zindex-over-content"); 353 | toggleContents.classList.add("quarto-sidebar-toggle-contents"); 354 | for (const child of el.children) { 355 | if (child.id === "toc-title") { 356 | continue; 357 | } 358 | 359 | const clone = child.cloneNode(true); 360 | clone.style.opacity = 1; 361 | clone.style.display = null; 362 | toggleContents.append(clone); 363 | } 364 | toggleContents.style.height = "0px"; 365 | const positionToggle = () => { 366 | // position the element (top left of parent, same width as parent) 367 | if (!elRect) { 368 | elRect = el.getBoundingClientRect(); 369 | } 370 | toggleContainer.style.left = `${elRect.left}px`; 371 | toggleContainer.style.top = `${elRect.top}px`; 372 | toggleContainer.style.width = `${elRect.width}px`; 373 | }; 374 | positionToggle(); 375 | 376 | toggleContainer.append(toggleContents); 377 | el.parentElement.prepend(toggleContainer); 378 | 379 | // Process clicks 380 | let tocShowing = false; 381 | // Allow the caller to control whether this is dismissed 382 | // when it is clicked (e.g. sidebar navigation supports 383 | // opening and closing the nav tree, so don't dismiss on click) 384 | const clickEl = placeholderDescriptor.dismissOnClick 385 | ? toggleContainer 386 | : toggleTitle; 387 | 388 | const closeToggle = () => { 389 | if (tocShowing) { 390 | toggleContainer.classList.remove("expanded"); 391 | toggleContents.style.height = "0px"; 392 | tocShowing = false; 393 | } 394 | }; 395 | 396 | // Get rid of any expanded toggle if the user scrolls 397 | window.document.addEventListener( 398 | "scroll", 399 | throttle(() => { 400 | closeToggle(); 401 | }, 50) 402 | ); 403 | 404 | // Handle positioning of the toggle 405 | window.addEventListener( 406 | "resize", 407 | throttle(() => { 408 | elRect = undefined; 409 | positionToggle(); 410 | }, 50) 411 | ); 412 | 413 | window.addEventListener("quarto-hrChanged", () => { 414 | elRect = undefined; 415 | }); 416 | 417 | // Process the click 418 | clickEl.onclick = () => { 419 | if (!tocShowing) { 420 | toggleContainer.classList.add("expanded"); 421 | toggleContents.style.height = null; 422 | tocShowing = true; 423 | } else { 424 | closeToggle(); 425 | } 426 | }; 427 | }); 428 | }; 429 | 430 | // Converts a sidebar from a menu back to a sidebar 431 | const convertToSidebar = () => { 432 | for (const child of el.children) { 433 | child.style.opacity = 1; 434 | child.style.overflow = null; 435 | } 436 | 437 | const placeholderEl = window.document.getElementById( 438 | placeholderDescriptor.id 439 | ); 440 | if (placeholderEl) { 441 | placeholderEl.remove(); 442 | } 443 | 444 | el.classList.remove("rollup"); 445 | }; 446 | 447 | if (isReaderMode()) { 448 | convertToMenu(); 449 | isVisible = false; 450 | } else { 451 | // Find the top and bottom o the element that is being managed 452 | const elTop = el.offsetTop; 453 | const elBottom = 454 | elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; 455 | 456 | if (!isVisible) { 457 | // If the element is current not visible reveal if there are 458 | // no conflicts with overlay regions 459 | if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { 460 | convertToSidebar(); 461 | isVisible = true; 462 | } 463 | } else { 464 | // If the element is visible, hide it if it conflicts with overlay regions 465 | // and insert a placeholder toggle (or if we're in reader mode) 466 | if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { 467 | convertToMenu(); 468 | isVisible = false; 469 | } 470 | } 471 | } 472 | } 473 | }; 474 | }; 475 | 476 | const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); 477 | for (const tabEl of tabEls) { 478 | const id = tabEl.getAttribute("data-bs-target"); 479 | if (id) { 480 | const columnEl = document.querySelector( 481 | `${id} .column-margin, .tabset-margin-content` 482 | ); 483 | if (columnEl) 484 | tabEl.addEventListener("shown.bs.tab", function (event) { 485 | const el = event.srcElement; 486 | if (el) { 487 | const visibleCls = `${el.id}-margin-content`; 488 | // walk up until we find a parent tabset 489 | let panelTabsetEl = el.parentElement; 490 | while (panelTabsetEl) { 491 | if (panelTabsetEl.classList.contains("panel-tabset")) { 492 | break; 493 | } 494 | panelTabsetEl = panelTabsetEl.parentElement; 495 | } 496 | 497 | if (panelTabsetEl) { 498 | const prevSib = panelTabsetEl.previousElementSibling; 499 | if ( 500 | prevSib && 501 | prevSib.classList.contains("tabset-margin-container") 502 | ) { 503 | const childNodes = prevSib.querySelectorAll( 504 | ".tabset-margin-content" 505 | ); 506 | for (const childEl of childNodes) { 507 | if (childEl.classList.contains(visibleCls)) { 508 | childEl.classList.remove("collapse"); 509 | } else { 510 | childEl.classList.add("collapse"); 511 | } 512 | } 513 | } 514 | } 515 | } 516 | 517 | layoutMarginEls(); 518 | }); 519 | } 520 | } 521 | 522 | // Manage the visibility of the toc and the sidebar 523 | const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { 524 | id: "quarto-toc-toggle", 525 | titleSelector: "#toc-title", 526 | dismissOnClick: true, 527 | }); 528 | const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { 529 | id: "quarto-sidebarnav-toggle", 530 | titleSelector: ".title", 531 | dismissOnClick: false, 532 | }); 533 | let tocLeftScrollVisibility; 534 | if (leftTocEl) { 535 | tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { 536 | id: "quarto-lefttoc-toggle", 537 | titleSelector: "#toc-title", 538 | dismissOnClick: true, 539 | }); 540 | } 541 | 542 | // Find the first element that uses formatting in special columns 543 | const conflictingEls = window.document.body.querySelectorAll( 544 | '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' 545 | ); 546 | 547 | // Filter all the possibly conflicting elements into ones 548 | // the do conflict on the left or ride side 549 | const arrConflictingEls = Array.from(conflictingEls); 550 | const leftSideConflictEls = arrConflictingEls.filter((el) => { 551 | if (el.tagName === "ASIDE") { 552 | return false; 553 | } 554 | return Array.from(el.classList).find((className) => { 555 | return ( 556 | className !== "column-body" && 557 | className.startsWith("column-") && 558 | !className.endsWith("right") && 559 | !className.endsWith("container") && 560 | className !== "column-margin" 561 | ); 562 | }); 563 | }); 564 | const rightSideConflictEls = arrConflictingEls.filter((el) => { 565 | if (el.tagName === "ASIDE") { 566 | return true; 567 | } 568 | 569 | const hasMarginCaption = Array.from(el.classList).find((className) => { 570 | return className == "margin-caption"; 571 | }); 572 | if (hasMarginCaption) { 573 | return true; 574 | } 575 | 576 | return Array.from(el.classList).find((className) => { 577 | return ( 578 | className !== "column-body" && 579 | !className.endsWith("container") && 580 | className.startsWith("column-") && 581 | !className.endsWith("left") 582 | ); 583 | }); 584 | }); 585 | 586 | const kOverlapPaddingSize = 10; 587 | function toRegions(els) { 588 | return els.map((el) => { 589 | const boundRect = el.getBoundingClientRect(); 590 | const top = 591 | boundRect.top + 592 | document.documentElement.scrollTop - 593 | kOverlapPaddingSize; 594 | return { 595 | top, 596 | bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, 597 | }; 598 | }); 599 | } 600 | 601 | let hasObserved = false; 602 | const visibleItemObserver = (els) => { 603 | let visibleElements = [...els]; 604 | const intersectionObserver = new IntersectionObserver( 605 | (entries, _observer) => { 606 | entries.forEach((entry) => { 607 | if (entry.isIntersecting) { 608 | if (visibleElements.indexOf(entry.target) === -1) { 609 | visibleElements.push(entry.target); 610 | } 611 | } else { 612 | visibleElements = visibleElements.filter((visibleEntry) => { 613 | return visibleEntry !== entry; 614 | }); 615 | } 616 | }); 617 | 618 | if (!hasObserved) { 619 | hideOverlappedSidebars(); 620 | } 621 | hasObserved = true; 622 | }, 623 | {} 624 | ); 625 | els.forEach((el) => { 626 | intersectionObserver.observe(el); 627 | }); 628 | 629 | return { 630 | getVisibleEntries: () => { 631 | return visibleElements; 632 | }, 633 | }; 634 | }; 635 | 636 | const rightElementObserver = visibleItemObserver(rightSideConflictEls); 637 | const leftElementObserver = visibleItemObserver(leftSideConflictEls); 638 | 639 | const hideOverlappedSidebars = () => { 640 | marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); 641 | sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); 642 | if (tocLeftScrollVisibility) { 643 | tocLeftScrollVisibility( 644 | toRegions(leftElementObserver.getVisibleEntries()) 645 | ); 646 | } 647 | }; 648 | 649 | window.quartoToggleReader = () => { 650 | // Applies a slow class (or removes it) 651 | // to update the transition speed 652 | const slowTransition = (slow) => { 653 | const manageTransition = (id, slow) => { 654 | const el = document.getElementById(id); 655 | if (el) { 656 | if (slow) { 657 | el.classList.add("slow"); 658 | } else { 659 | el.classList.remove("slow"); 660 | } 661 | } 662 | }; 663 | 664 | manageTransition("TOC", slow); 665 | manageTransition("quarto-sidebar", slow); 666 | }; 667 | const readerMode = !isReaderMode(); 668 | setReaderModeValue(readerMode); 669 | 670 | // If we're entering reader mode, slow the transition 671 | if (readerMode) { 672 | slowTransition(readerMode); 673 | } 674 | highlightReaderToggle(readerMode); 675 | hideOverlappedSidebars(); 676 | 677 | // If we're exiting reader mode, restore the non-slow transition 678 | if (!readerMode) { 679 | slowTransition(!readerMode); 680 | } 681 | }; 682 | 683 | const highlightReaderToggle = (readerMode) => { 684 | const els = document.querySelectorAll(".quarto-reader-toggle"); 685 | if (els) { 686 | els.forEach((el) => { 687 | if (readerMode) { 688 | el.classList.add("reader"); 689 | } else { 690 | el.classList.remove("reader"); 691 | } 692 | }); 693 | } 694 | }; 695 | 696 | const setReaderModeValue = (val) => { 697 | if (window.location.protocol !== "file:") { 698 | window.localStorage.setItem("quarto-reader-mode", val); 699 | } else { 700 | localReaderMode = val; 701 | } 702 | }; 703 | 704 | const isReaderMode = () => { 705 | if (window.location.protocol !== "file:") { 706 | return window.localStorage.getItem("quarto-reader-mode") === "true"; 707 | } else { 708 | return localReaderMode; 709 | } 710 | }; 711 | let localReaderMode = null; 712 | 713 | const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); 714 | const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; 715 | 716 | // Walk the TOC and collapse/expand nodes 717 | // Nodes are expanded if: 718 | // - they are top level 719 | // - they have children that are 'active' links 720 | // - they are directly below an link that is 'active' 721 | const walk = (el, depth) => { 722 | // Tick depth when we enter a UL 723 | if (el.tagName === "UL") { 724 | depth = depth + 1; 725 | } 726 | 727 | // It this is active link 728 | let isActiveNode = false; 729 | if (el.tagName === "A" && el.classList.contains("active")) { 730 | isActiveNode = true; 731 | } 732 | 733 | // See if there is an active child to this element 734 | let hasActiveChild = false; 735 | for (child of el.children) { 736 | hasActiveChild = walk(child, depth) || hasActiveChild; 737 | } 738 | 739 | // Process the collapse state if this is an UL 740 | if (el.tagName === "UL") { 741 | if (tocOpenDepth === -1 && depth > 1) { 742 | el.classList.add("collapse"); 743 | } else if ( 744 | depth <= tocOpenDepth || 745 | hasActiveChild || 746 | prevSiblingIsActiveLink(el) 747 | ) { 748 | el.classList.remove("collapse"); 749 | } else { 750 | el.classList.add("collapse"); 751 | } 752 | 753 | // untick depth when we leave a UL 754 | depth = depth - 1; 755 | } 756 | return hasActiveChild || isActiveNode; 757 | }; 758 | 759 | // walk the TOC and expand / collapse any items that should be shown 760 | 761 | if (tocEl) { 762 | walk(tocEl, 0); 763 | updateActiveLink(); 764 | } 765 | 766 | // Throttle the scroll event and walk peridiocally 767 | window.document.addEventListener( 768 | "scroll", 769 | throttle(() => { 770 | if (tocEl) { 771 | updateActiveLink(); 772 | walk(tocEl, 0); 773 | } 774 | if (!isReaderMode()) { 775 | hideOverlappedSidebars(); 776 | } 777 | }, 5) 778 | ); 779 | window.addEventListener( 780 | "resize", 781 | throttle(() => { 782 | if (!isReaderMode()) { 783 | hideOverlappedSidebars(); 784 | } 785 | }, 10) 786 | ); 787 | hideOverlappedSidebars(); 788 | highlightReaderToggle(isReaderMode()); 789 | }); 790 | 791 | // grouped tabsets 792 | window.addEventListener("pageshow", (_event) => { 793 | function getTabSettings() { 794 | const data = localStorage.getItem("quarto-persistent-tabsets-data"); 795 | if (!data) { 796 | localStorage.setItem("quarto-persistent-tabsets-data", "{}"); 797 | return {}; 798 | } 799 | if (data) { 800 | return JSON.parse(data); 801 | } 802 | } 803 | 804 | function setTabSettings(data) { 805 | localStorage.setItem( 806 | "quarto-persistent-tabsets-data", 807 | JSON.stringify(data) 808 | ); 809 | } 810 | 811 | function setTabState(groupName, groupValue) { 812 | const data = getTabSettings(); 813 | data[groupName] = groupValue; 814 | setTabSettings(data); 815 | } 816 | 817 | function toggleTab(tab, active) { 818 | const tabPanelId = tab.getAttribute("aria-controls"); 819 | const tabPanel = document.getElementById(tabPanelId); 820 | if (active) { 821 | tab.classList.add("active"); 822 | tabPanel.classList.add("active"); 823 | } else { 824 | tab.classList.remove("active"); 825 | tabPanel.classList.remove("active"); 826 | } 827 | } 828 | 829 | function toggleAll(selectedGroup, selectorsToSync) { 830 | for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { 831 | const active = selectedGroup === thisGroup; 832 | for (const tab of tabs) { 833 | toggleTab(tab, active); 834 | } 835 | } 836 | } 837 | 838 | function findSelectorsToSyncByLanguage() { 839 | const result = {}; 840 | const tabs = Array.from( 841 | document.querySelectorAll(`div[data-group] a[id^='tabset-']`) 842 | ); 843 | for (const item of tabs) { 844 | const div = item.parentElement.parentElement.parentElement; 845 | const group = div.getAttribute("data-group"); 846 | if (!result[group]) { 847 | result[group] = {}; 848 | } 849 | const selectorsToSync = result[group]; 850 | const value = item.innerHTML; 851 | if (!selectorsToSync[value]) { 852 | selectorsToSync[value] = []; 853 | } 854 | selectorsToSync[value].push(item); 855 | } 856 | return result; 857 | } 858 | 859 | function setupSelectorSync() { 860 | const selectorsToSync = findSelectorsToSyncByLanguage(); 861 | Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { 862 | Object.entries(tabSetsByValue).forEach(([value, items]) => { 863 | items.forEach((item) => { 864 | item.addEventListener("click", (_event) => { 865 | setTabState(group, value); 866 | toggleAll(value, selectorsToSync[group]); 867 | }); 868 | }); 869 | }); 870 | }); 871 | return selectorsToSync; 872 | } 873 | 874 | const selectorsToSync = setupSelectorSync(); 875 | for (const [group, selectedName] of Object.entries(getTabSettings())) { 876 | const selectors = selectorsToSync[group]; 877 | // it's possible that stale state gives us empty selections, so we explicitly check here. 878 | if (selectors) { 879 | toggleAll(selectedName, selectors); 880 | } 881 | } 882 | }); 883 | 884 | function throttle(func, wait) { 885 | let waiting = false; 886 | return function () { 887 | if (!waiting) { 888 | func.apply(this, arguments); 889 | waiting = true; 890 | setTimeout(function () { 891 | waiting = false; 892 | }, wait); 893 | } 894 | }; 895 | } 896 | 897 | function nexttick(func) { 898 | return setTimeout(func, 0); 899 | } 900 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/tippy.css: -------------------------------------------------------------------------------- 1 | .tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} -------------------------------------------------------------------------------- /docs/site_libs/quarto-html/tippy.umd.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); 2 | 3 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-nav/headroom.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it 3 | * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js 4 | * License: MIT 5 | */ 6 | 7 | !function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); 8 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-nav/quarto-nav.js: -------------------------------------------------------------------------------- 1 | const headroomChanged = new CustomEvent("quarto-hrChanged", { 2 | detail: {}, 3 | bubbles: true, 4 | cancelable: false, 5 | composed: false, 6 | }); 7 | 8 | window.document.addEventListener("DOMContentLoaded", function () { 9 | let init = false; 10 | 11 | // Manage the back to top button, if one is present. 12 | let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; 13 | const scrollDownBuffer = 5; 14 | const scrollUpBuffer = 35; 15 | const btn = document.getElementById("quarto-back-to-top"); 16 | const hideBackToTop = () => { 17 | btn.style.display = "none"; 18 | }; 19 | const showBackToTop = () => { 20 | btn.style.display = "inline-block"; 21 | }; 22 | if (btn) { 23 | window.document.addEventListener( 24 | "scroll", 25 | function () { 26 | const currentScrollTop = 27 | window.pageYOffset || document.documentElement.scrollTop; 28 | 29 | // Shows and hides the button 'intelligently' as the user scrolls 30 | if (currentScrollTop - scrollDownBuffer > lastScrollTop) { 31 | hideBackToTop(); 32 | lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; 33 | } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { 34 | showBackToTop(); 35 | lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; 36 | } 37 | 38 | // Show the button at the bottom, hides it at the top 39 | if (currentScrollTop <= 0) { 40 | hideBackToTop(); 41 | } else if ( 42 | window.innerHeight + currentScrollTop >= 43 | document.body.offsetHeight 44 | ) { 45 | showBackToTop(); 46 | } 47 | }, 48 | false 49 | ); 50 | } 51 | 52 | function throttle(func, wait) { 53 | var timeout; 54 | return function () { 55 | const context = this; 56 | const args = arguments; 57 | const later = function () { 58 | clearTimeout(timeout); 59 | timeout = null; 60 | func.apply(context, args); 61 | }; 62 | 63 | if (!timeout) { 64 | timeout = setTimeout(later, wait); 65 | } 66 | }; 67 | } 68 | 69 | function headerOffset() { 70 | // Set an offset if there is are fixed top navbar 71 | const headerEl = window.document.querySelector("header.fixed-top"); 72 | if (headerEl) { 73 | return headerEl.clientHeight; 74 | } else { 75 | return 0; 76 | } 77 | } 78 | 79 | function footerOffset() { 80 | const footerEl = window.document.querySelector("footer.footer"); 81 | if (footerEl) { 82 | return footerEl.clientHeight; 83 | } else { 84 | return 0; 85 | } 86 | } 87 | 88 | function dashboardOffset() { 89 | const dashboardNavEl = window.document.getElementById( 90 | "quarto-dashboard-header" 91 | ); 92 | if (dashboardNavEl !== null) { 93 | return dashboardNavEl.clientHeight; 94 | } else { 95 | return 0; 96 | } 97 | } 98 | 99 | function updateDocumentOffsetWithoutAnimation() { 100 | updateDocumentOffset(false); 101 | } 102 | 103 | function updateDocumentOffset(animated) { 104 | // set body offset 105 | const topOffset = headerOffset(); 106 | const bodyOffset = topOffset + footerOffset() + dashboardOffset(); 107 | const bodyEl = window.document.body; 108 | bodyEl.setAttribute("data-bs-offset", topOffset); 109 | bodyEl.style.paddingTop = topOffset + "px"; 110 | 111 | // deal with sidebar offsets 112 | const sidebars = window.document.querySelectorAll( 113 | ".sidebar, .headroom-target" 114 | ); 115 | sidebars.forEach((sidebar) => { 116 | if (!animated) { 117 | sidebar.classList.add("notransition"); 118 | // Remove the no transition class after the animation has time to complete 119 | setTimeout(function () { 120 | sidebar.classList.remove("notransition"); 121 | }, 201); 122 | } 123 | 124 | if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { 125 | sidebar.style.top = "0"; 126 | sidebar.style.maxHeight = "100vh"; 127 | } else { 128 | sidebar.style.top = topOffset + "px"; 129 | sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; 130 | } 131 | }); 132 | 133 | // allow space for footer 134 | const mainContainer = window.document.querySelector(".quarto-container"); 135 | if (mainContainer) { 136 | mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; 137 | } 138 | 139 | // link offset 140 | let linkStyle = window.document.querySelector("#quarto-target-style"); 141 | if (!linkStyle) { 142 | linkStyle = window.document.createElement("style"); 143 | linkStyle.setAttribute("id", "quarto-target-style"); 144 | window.document.head.appendChild(linkStyle); 145 | } 146 | while (linkStyle.firstChild) { 147 | linkStyle.removeChild(linkStyle.firstChild); 148 | } 149 | if (topOffset > 0) { 150 | linkStyle.appendChild( 151 | window.document.createTextNode(` 152 | section:target::before { 153 | content: ""; 154 | display: block; 155 | height: ${topOffset}px; 156 | margin: -${topOffset}px 0 0; 157 | }`) 158 | ); 159 | } 160 | if (init) { 161 | window.dispatchEvent(headroomChanged); 162 | } 163 | init = true; 164 | } 165 | 166 | // initialize headroom 167 | var header = window.document.querySelector("#quarto-header"); 168 | if (header && window.Headroom) { 169 | const headroom = new window.Headroom(header, { 170 | tolerance: 5, 171 | onPin: function () { 172 | const sidebars = window.document.querySelectorAll( 173 | ".sidebar, .headroom-target" 174 | ); 175 | sidebars.forEach((sidebar) => { 176 | sidebar.classList.remove("sidebar-unpinned"); 177 | }); 178 | updateDocumentOffset(); 179 | }, 180 | onUnpin: function () { 181 | const sidebars = window.document.querySelectorAll( 182 | ".sidebar, .headroom-target" 183 | ); 184 | sidebars.forEach((sidebar) => { 185 | sidebar.classList.add("sidebar-unpinned"); 186 | }); 187 | updateDocumentOffset(); 188 | }, 189 | }); 190 | headroom.init(); 191 | 192 | let frozen = false; 193 | window.quartoToggleHeadroom = function () { 194 | if (frozen) { 195 | headroom.unfreeze(); 196 | frozen = false; 197 | } else { 198 | headroom.freeze(); 199 | frozen = true; 200 | } 201 | }; 202 | } 203 | 204 | window.addEventListener( 205 | "hashchange", 206 | function (e) { 207 | if ( 208 | getComputedStyle(document.documentElement).scrollBehavior !== "smooth" 209 | ) { 210 | window.scrollTo(0, window.pageYOffset - headerOffset()); 211 | } 212 | }, 213 | false 214 | ); 215 | 216 | // Observe size changed for the header 217 | const headerEl = window.document.querySelector("header.fixed-top"); 218 | if (headerEl && window.ResizeObserver) { 219 | const observer = new window.ResizeObserver(() => { 220 | setTimeout(updateDocumentOffsetWithoutAnimation, 0); 221 | }); 222 | observer.observe(headerEl, { 223 | attributes: true, 224 | childList: true, 225 | characterData: true, 226 | }); 227 | } else { 228 | window.addEventListener( 229 | "resize", 230 | throttle(updateDocumentOffsetWithoutAnimation, 50) 231 | ); 232 | } 233 | setTimeout(updateDocumentOffsetWithoutAnimation, 250); 234 | 235 | // fixup index.html links if we aren't on the filesystem 236 | if (window.location.protocol !== "file:") { 237 | const links = window.document.querySelectorAll("a"); 238 | for (let i = 0; i < links.length; i++) { 239 | if (links[i].href) { 240 | links[i].href = links[i].href.replace(/\/index\.html/, "/"); 241 | } 242 | } 243 | 244 | // Fixup any sharing links that require urls 245 | // Append url to any sharing urls 246 | const sharingLinks = window.document.querySelectorAll( 247 | "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" 248 | ); 249 | for (let i = 0; i < sharingLinks.length; i++) { 250 | const sharingLink = sharingLinks[i]; 251 | const href = sharingLink.getAttribute("href"); 252 | if (href) { 253 | sharingLink.setAttribute( 254 | "href", 255 | href.replace("|url|", window.location.href) 256 | ); 257 | } 258 | } 259 | 260 | // Scroll the active navigation item into view, if necessary 261 | const navSidebar = window.document.querySelector("nav#quarto-sidebar"); 262 | if (navSidebar) { 263 | // Find the active item 264 | const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); 265 | if (activeItem) { 266 | // Wait for the scroll height and height to resolve by observing size changes on the 267 | // nav element that is scrollable 268 | const resizeObserver = new ResizeObserver((_entries) => { 269 | // The bottom of the element 270 | const elBottom = activeItem.offsetTop; 271 | const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; 272 | 273 | // The element height and scroll height are the same, then we are still loading 274 | if (viewBottom !== navSidebar.scrollHeight) { 275 | // Determine if the item isn't visible and scroll to it 276 | if (elBottom >= viewBottom) { 277 | navSidebar.scrollTop = elBottom; 278 | } 279 | 280 | // stop observing now since we've completed the scroll 281 | resizeObserver.unobserve(navSidebar); 282 | } 283 | }); 284 | resizeObserver.observe(navSidebar); 285 | } 286 | } 287 | } 288 | }); 289 | -------------------------------------------------------------------------------- /docs/site_libs/quarto-search/fuse.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) 3 | * 4 | * Copyright (c) 2022 Kiro Risk (http://kiro.me) 5 | * All Rights Reserved. Apache Software License 2.0 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | */ 9 | var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); -------------------------------------------------------------------------------- /docs/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://ayueme.github.io/R_machine_learning/index.html 5 | 2024-05-05T09:58:59.457Z 6 | 7 | 8 | https://ayueme.github.io/R_machine_learning/机器学习简介.html 9 | 2024-04-30T04:13:34.908Z 10 | 11 | 12 | https://ayueme.github.io/R_machine_learning/数据预处理.html 13 | 2024-05-05T11:32:07.645Z 14 | 15 | 16 | https://ayueme.github.io/R_machine_learning/数据划分.html 17 | 2024-05-04T14:06:30.378Z 18 | 19 | 20 | https://ayueme.github.io/R_machine_learning/模型评价.html 21 | 2024-05-05T11:03:10.974Z 22 | 23 | 24 | https://ayueme.github.io/R_machine_learning/超参数调优简介.html 25 | 2024-05-04T13:44:30.659Z 26 | 27 | 28 | https://ayueme.github.io/R_machine_learning/变量选择.html 29 | 2024-04-27T11:10:17.968Z 30 | 31 | 32 | https://ayueme.github.io/R_machine_learning/数据准备.html 33 | 2024-05-02T13:01:25.246Z 34 | 35 | 36 | https://ayueme.github.io/R_machine_learning/聚类分析.html 37 | 2024-05-05T10:00:21.909Z 38 | 39 | 40 | https://ayueme.github.io/R_machine_learning/主成分分析.html 41 | 2024-05-05T10:02:53.709Z 42 | 43 | 44 | https://ayueme.github.io/R_machine_learning/主成分分析可视化.html 45 | 2024-05-05T10:04:57.571Z 46 | 47 | 48 | https://ayueme.github.io/R_machine_learning/多元线性回归.html 49 | 2024-05-05T10:06:30.942Z 50 | 51 | 52 | https://ayueme.github.io/R_machine_learning/逻辑回归.html 53 | 2024-05-05T10:20:31.882Z 54 | 55 | 56 | https://ayueme.github.io/R_machine_learning/glmnet.html 57 | 2024-05-05T10:25:24.794Z 58 | 59 | 60 | https://ayueme.github.io/R_machine_learning/KNN.html 61 | 2024-05-02T12:48:41.463Z 62 | 63 | 64 | https://ayueme.github.io/R_machine_learning/支持向量机.html 65 | 2024-05-05T11:36:55.781Z 66 | 67 | 68 | https://ayueme.github.io/R_machine_learning/支持向量机核函数比较.html 69 | 2024-05-05T11:41:03.106Z 70 | 71 | 72 | https://ayueme.github.io/R_machine_learning/决策树.html 73 | 2024-05-05T11:42:03.059Z 74 | 75 | 76 | https://ayueme.github.io/R_machine_learning/决策树可视化.html 77 | 2024-04-28T12:55:26.011Z 78 | 79 | 80 | https://ayueme.github.io/R_machine_learning/集成算法类型.html 81 | 2024-05-05T10:38:32.656Z 82 | 83 | 84 | https://ayueme.github.io/R_machine_learning/随机森林.html 85 | 2024-05-05T10:40:15.964Z 86 | 87 | 88 | https://ayueme.github.io/R_machine_learning/gbm.html 89 | 2024-05-05T10:44:34.744Z 90 | 91 | 92 | https://ayueme.github.io/R_machine_learning/xgboost.html 93 | 2024-05-05T10:58:04.525Z 94 | 95 | 96 | https://ayueme.github.io/R_machine_learning/lightGBM.html 97 | 2024-05-05T10:59:42.438Z 98 | 99 | 100 | https://ayueme.github.io/R_machine_learning/catboost.html 101 | 2024-05-02T12:48:16.839Z 102 | 103 | 104 | https://ayueme.github.io/R_machine_learning/9999-appendix.html 105 | 2024-05-05T10:46:43.938Z 106 | 107 | 108 | https://ayueme.github.io/R_machine_learning/R语言实战机器学习.pdf 109 | 2024-05-05T12:01:03.938Z 110 | 111 | 112 | -------------------------------------------------------------------------------- /docs/主成分分析_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/主成分分析_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-17-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-17-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-18-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-18-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-19-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-19-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-20-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-20-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-21-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-21-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-22-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-22-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-23-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-23-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-24-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-24-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-25-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-25-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-26-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-26-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-30-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-30-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-31-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-31-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/主成分分析可视化_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/主成分分析可视化_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-19-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-19-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/决策树_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/决策树可视化_files/figure-html/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树可视化_files/figure-html/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/决策树可视化_files/figure-html/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树可视化_files/figure-html/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /docs/决策树可视化_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树可视化_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/决策树可视化_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/决策树可视化_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-21-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-21-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/多元线性回归_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/多元线性回归_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-8-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-8-2.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-8-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-8-3.png -------------------------------------------------------------------------------- /docs/支持向量机_files/figure-html/unnamed-chunk-8-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机_files/figure-html/unnamed-chunk-8-4.png -------------------------------------------------------------------------------- /docs/支持向量机核函数比较_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机核函数比较_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/支持向量机核函数比较_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/支持向量机核函数比较_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/数据准备_files/figure-html/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据准备_files/figure-html/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/数据准备_files/figure-html/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据准备_files/figure-html/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /docs/数据准备_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据准备_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/数据准备_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据准备_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-html/unnamed-chunk-15-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-html/unnamed-chunk-15-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-pdf/unnamed-chunk-10-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-pdf/unnamed-chunk-10-1.pdf -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-pdf/unnamed-chunk-11-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-pdf/unnamed-chunk-11-1.pdf -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-pdf/unnamed-chunk-15-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-pdf/unnamed-chunk-15-1.pdf -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-pdf/unnamed-chunk-6-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-pdf/unnamed-chunk-6-1.pdf -------------------------------------------------------------------------------- /docs/数据预处理_files/figure-pdf/unnamed-chunk-9-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/数据预处理_files/figure-pdf/unnamed-chunk-9-1.pdf -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-10-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-11-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-12-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-13-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-14-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-16-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-16-2.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-17-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-17-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-18-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-18-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-20-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-20-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-21-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-21-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-24-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-24-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-25-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-25-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-5-2.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/聚类分析_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/聚类分析_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-15-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-15-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-17-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-17-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/随机森林_files/figure-html/unnamed-chunk-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/docs/随机森林_files/figure-html/unnamed-chunk-9-1.png -------------------------------------------------------------------------------- /figs/46346465dfgdfgd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/46346465dfgdfgd.jpg -------------------------------------------------------------------------------- /figs/6325461.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/6325461.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-22_15-54-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-22_15-54-53.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-22_16-05-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-22_16-05-22.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-22_16-12-43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-22_16-12-43.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-26_19-58-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-26_19-58-41.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-26_20-06-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-26_20-06-48.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-27_19-11-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-27_19-11-28.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-27_19-52-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-27_19-52-48.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-27_20-19-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-27_20-19-25.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-27_20-20-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-27_20-20-23.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-28_10-41-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-28_10-41-44.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-28_12-44-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-28_12-44-41.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-28_12-56-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-28_12-56-47.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-30_20-18-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-30_20-18-13.png -------------------------------------------------------------------------------- /figs/PixPin_2024-04-30_20-19-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-04-30_20-19-09.png -------------------------------------------------------------------------------- /figs/PixPin_2024-05-05_19-41-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-05-05_19-41-50.png -------------------------------------------------------------------------------- /figs/PixPin_2024-05-17_15-53-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/PixPin_2024-05-17_15-53-34.png -------------------------------------------------------------------------------- /figs/Snipaste_2023-04-01_14-12-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/Snipaste_2023-04-01_14-12-58.png -------------------------------------------------------------------------------- /figs/Snipaste_2023-04-05_16-05-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/Snipaste_2023-04-05_16-05-01.png -------------------------------------------------------------------------------- /figs/Snipaste_2023-04-05_16-07-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/Snipaste_2023-04-05_16-07-01.png -------------------------------------------------------------------------------- /figs/Snipaste_2023-06-12_15-40-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/Snipaste_2023-06-12_15-40-00.png -------------------------------------------------------------------------------- /figs/模型复杂度和泛化误差.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayueme/machine_learning_base_r/b3e8ded7cdb7f821e48313d652e8a4e8628d07ae/figs/模型复杂度和泛化误差.png -------------------------------------------------------------------------------- /preamble.tex: -------------------------------------------------------------------------------- 1 | \usepackage[heading=true, fontset=fandol, UTF8]{ctex} 2 | \usepackage[scale=0.85]{sourcecodepro} 3 | %\usepackage{booktabs} % 控制三线表 4 | \RecustomVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},formatcom=\xeCJKVerbAddon} 5 | %\usepackage{bookmark} 6 | %\bookmarksetup{open,numbered, 7 | %depth=2, %设置PDF的书签级别,2显示到subsection,3显示到subsubsection 8 | %addtohook={% 9 | %\ifnum\bookmarkget{level}=0 % chapter 10 | %\bookmarksetup{bold}%PDF标签的主标题加粗 11 | %\fi 12 | %\ifnum\bookmarkget{level}=-1 % part 13 | %\bookmarksetup{color=orange,bold}%PDF标签标题颜色 14 | %\fi 15 | %} 16 | %} 17 | 18 | %控制行距 19 | \usepackage{setspace} 20 | %\onehalfspacing 21 | \linespread{1.25} 22 | \setlength{\intextsep}{0.5em} % 浮动对象(如图片、表格)和文字之间的间距设置为0.5em 23 | \setlength{\textfloatsep}{0.5em} % 浮动对象和文本之间的间距设置为0.5em 24 | 25 | 26 | \usepackage{xcolor} 27 | \definecolor{light}{HTML}{F6F6F6} 28 | \definecolor{highlight}{HTML}{0074CC} 29 | \definecolor{dark}{HTML}{330033} --------------------------------------------------------------------------------