flowchart LR
A[Hard edge] --> B(Round edge)
B --> C{Decision}
C --> D[Result one]
C --> E[Result two]
16 HTML 文档
从本章开始,接下来的三个章节都围绕数据交流的工具及其案例展开。日常工作中,有的需要产出具有丰富交互内容的网页文档(HTML 文档),有的需要产出排版精美、符合格式要求的、可打印的便携式文档(PDF 文档),有的需要可协作共享、可编辑修改的办公文档(Office 文档)。在 R 语言社区,陆续出现两套解决方案,一个是以 rmarkdown 包为核心的 R Markdown 生态,另一个是以 Quarto 为核心的文档写作和发布系统。继 R Markdown 出现 10 余年后,2022 年 RStudio 公司发布 Quarto 系统,整合 R Markdown 生态,提供统一的语法。截止写作时间,相比于成熟的 R Markdown 生态,Quarto 系统还在路上。因此,不拘泥于 R Markdown 还是 Quarto,根据使用场景、实践经验、工具现状,选择最合适的工具介绍,整体上,以 Quarto 为主,R Markdown 补位的方式介绍。
16.1 文档元素
无论是 R Markdown 还是 Quarto,都是站在巨人 Pandoc 的肩膀上,Pandoc 在普通 Markdown 的基础上提供了许多扩展支持,通过一些简单的标记,大大丰富了文档内容,下面介绍的内容适用于 R Markdown 和 Quarto,无论文档最终的输出格式如何。
16.1.1 样式
文字样式,如加粗、倾斜、上下标等。 加粗和倾斜。
16.1.2 图片
其一插入代码生成的图片,其二导入外部制作好的现成图片。
ggplot2 图形
16.1.3 表格
Markdown 表格、knitr 制作的表格
16.1.4 列表
常见的列表有无序列表、有序列表及其嵌套。
有序的列表。
- 第一条
- 第二条
无序的列表。
- 第一条
- 第二条
有序列表的嵌套。
- 条目 1
- 条目 2
- 条目 3
- 条目 3.1
- 条目 3.2
无序列表的嵌套。
- 条目 1
- 条目 2
- 条目 2.1
- 条目 2.2
可交叉引用的有序列表。
- 第一个人是好的.
- 第二个人是坏的.
- 第三个人是丑陋的.
在 (@)
中添加标识符,如 (@good)
就可以引用列表中的条目 (1)。
16.1.5 引用
除了引用外部书籍、文章、刊物等的内容,还有长文档内部的交叉引用,这项功能是非常需要的,涉及图、表、公式、定理,参考文献,列表条目等。
16.1.6 脚注
If you imagine that this pen is Trellis, then Lattice is not this pen.1
— Paul Murrell
16.1.7 公式
行内公式一对美元符号 \(\alpha\) ,行间公式 \[\alpha\] ,如 方程式 16.1
\[ L(\beta,\boldsymbol{\theta}) = f(y;\beta,\boldsymbol{\theta}) = \int_{\mathbb{R}^{n}}N(t;D\beta,\Sigma(\boldsymbol{\theta}))f(y|t)dt \tag{16.1}\]
多行公式逐行编号,多行公式中对某一(些)行编号都不支持。多行公式共用一个编号,如 方程式 16.2 。
\[ \begin{aligned} L(\beta,\boldsymbol{\theta}) & = \int_{\mathbb{R}^{n}} \frac{N(t;D\beta,\Sigma(\boldsymbol{\theta}))f(y|t)}{N(t;D\beta_{0},\Sigma(\boldsymbol{\theta}_{0}))f(y|t)}f(y,t)dt\\ & \varpropto \int_{\mathbb{R}^{n}} \frac{N(t;D\beta,\Sigma(\boldsymbol{\theta}))}{N(t;D\beta_{0},\Sigma(\boldsymbol{\theta}_{0}))}f(t|y)dt \\ &= E_{T|y}\left[\frac{N(t;D\beta,\Sigma(\boldsymbol{\theta}))}{N(t;D\beta_{0},\Sigma(\boldsymbol{\theta}_{0}))}\right] \end{aligned} \tag{16.2}\]
推荐在 equation
公式中,使用 split
环境,意思是一个公式很长,需要拆成多行,如 方程式 16.3 。
\[ \begin{split} \mathrm{Var}(\hat{\beta}) & =\mathrm{Var}((X'X)^{-1}X'y)\\ & =(X'X)^{-1}X'\mathrm{Var}(y)((X'X)^{-1}X')'\\ & =(X'X)^{-1}X'\mathrm{Var}(y)X(X'X)^{-1}\\ & =(X'X)^{-1}X'\sigma^{2}IX(X'X)^{-1}\\ & =(X'X)^{-1}\sigma^{2} \end{split} \tag{16.3}\]
注意,\mathbf
只对字母 \(a,b,c,A,B,C\) 加粗,mathjax 不支持公式中使用 \bm
对 \(\theta,\alpha,\beta,\ldots,\gamma\) 加粗,应该使用 \boldsymbol
16.2 制作报告
Quarto Report 文档
16.2.1 SQL 查询
Base R 内置的数据集都整合进 RSQLite 的样例数据库里了,
[1] "BOD" "CO2" "ChickWeight" "DNase"
[5] "Formaldehyde" "Indometh" "InsectSprays" "LifeCycleSavings"
[9] "Loblolly" "Orange" "OrchardSprays" "PlantGrowth"
[13] "Puromycin" "Theoph" "ToothGrowth" "USArrests"
[17] "USJudgeRatings" "airquality" "anscombe" "attenu"
[21] "attitude" "cars" "chickwts" "esoph"
[25] "faithful" "freeny" "infert" "iris"
[29] "longley" "morley" "mtcars" "npk"
[33] "pressure" "quakes" "randu" "rock"
[37] "sleep" "stackloss" "swiss" "trees"
[41] "warpbreaks" "women"
随意选择 5 行数据记录,将结果保存到变量 iris_preview
查看变量 iris_preview 的内容
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
结束后关闭连接
16.3 制作演示
Quarto Presentation
16.4 编写书籍
Quarto Book 网页格式
(on the difference of Lattice (which eventually was called grid) and Trellis) DSC 2001, Wien (March 2001)↩︎