6  底层体系

file_tar <- here::here("R/load-pkgs.R")
source(file_tar)

本章主要总结Quarto的架构体系和运行逻辑,其中会重点与Rmarkdown生态(包括bookdownblogdown等)进行比较。

6.1 quarto基础

6.1.1 版本维护

Quarto可以如下方式安装,要注意区别。当然维护者cderv指出使用者也不用太担心这个问题,因为Rstudio会自动识别安装的版本情况(参看社区讨论)。

(1)Rstudio安装同时会自动安装Quarto,安装路径在C:\Program Files\RStudio\resources\app\bin\quarto\bin。此时Quarto安装版本会受到Rstudio版本的影响。

(2)直接官网下载并安装最新版本Quarto到本地电脑。安装时要注意选择是只针对系统当前用户,还是选择针对系统所有用户。前者的安装路径为C:\Users\socce\AppData\Local\Programs\Quarto;而后者的安装路径为C:\Program Files\Quarto\bin

重要

经过测试,针对当前用户(user)的安装模式,不会被Rstudio检测到。而针对所有用户(administrator)的安装模式,则可以被Rstudio检测到。

(3)基于Quarto开发者的安装模式,一般人少用。可参看官方说明

Quarto当前使用版本信息可以通过quarto terminal(在Rstudio的终端界面下)shell命令进行查看:

```{sh}
quarto --version
```
# 此命令要求quarto以所有用户安装模式下才能运行
quarto --version

还可以通过R命令查看当前使用quarto的版本和安装路径:

```{r}
# version
quarto::quarto_version()
# path
Sys.which("quarto")
```
[1] '1.6.3'
                                                               quarto 
"C:\\Users\\huhua\\AppData\\Local\\Programs\\Quarto\\bin\\quarto.exe" 

6.2 文件路径

总是默认以项目文件夹为根路径(root path),子文件夹也是如此。

6.2.1 .qmd.R代码的路径调用

尽管都会以Rstudio projec根目录为初始目录,但经过测试可以发现,.qmd.R两类文件在相对路径调用上是有区别的:

(1)对于根目录文件下的my-doc.qmd文件的R chunk代码块,相对路径是可以正确识别和运行的。

```{r}
#| echo: true
# 以下代码为根目录文件下的`my-doc.qmd`文件的R chunk 代码块
# 相对路径是可以正确识别和运行的。
file_tar <- "data/test-data.txt"
dt <- read.delim(file_tar, header = TRUE, sep = " ")
```

(2)对于目录文件下的code/my-rcode.r文件的代码行,需要借助here()函数使用绝对路径,这样才能正常运行(不会报错)。

```{r}
#| echo: true
# 以下代码为目录文件下的`code/my-rcode.r`文件的代码行
# 相对路径是虽然是正确的,但却不可以运行(会报错)。
file_tar <- "data/test-data.txt"

# 需要借助`here()`函数使用绝对路径,这样才能正常运行(不会报错)。
file_tar <- here::here("data/test-data.txt")
dt <- read.delim(file_tar, header = TRUE, sep = " ")
```

6.2.2 外部资源调用

使用场景:在quarto project下html中嵌入其他工具链生成的资源材料,例如bookdown生成的_book文件夹、Xaringan生成的_my-slide.html幻灯片(不自容slide html,对应着一个_my-slide/文件夹)。

方法1:quarto project中可以通过设定yaml参数Site Resources: *.xlsx进行配置(参看官方Site Resources)。

方法2:在qmd文件中,直接使用<iframe src="./path/to/custom.html"> </iframe>进行调用。

注记

根据quarto维护者的回复,这样是不受支持的(参看)。

That use case is not supported by quarto, because we cannot know the structure of your file. If you want to have navigational support, then quarto needs to have access to the .qmd file, from which we can extract the metadata.

参考资料:

  • Include a html file in quarto website (参看队长问答

6.3 规则惯例

Quarto体系的维护,有其内在自洽的一套语法和规则设定。这里我将例举其中的一些实例。

6.3.1 tbl-subcap

简单地,如果使用了语法tbl-subcap,那么Quarto会默认为代码块里至少应该有两个表格。否则,如果使用了语法tbl-subcap,而代码块里却仅含有一个表格,那么就会报错!

以下代码可正常运行,可成功渲染:

```{r}
#| label: tbl-two-tables
#| layout-ncol: 2
#| tbl-cap: "示例数据"
#| tbl-subcap:
#| - "the first"
#| - "the second"

# 第一个表格
kable(smry_table01)
# 第二个表格
kable(smry_table02)
```

以下代码会报错,导致无法渲染:

```{r}
#| label: tbl-one-table
#| tbl-cap: "示例数据"
#| tbl-subcap: "my sub caption"

# 仅含一个表格
kable(smry_table)
```

6.4 数据分析

6.4.1 文档内R代码块

6.4.2 外部R代码文件

file_tar <- here("data/test-data.txt")
dt <- read.delim(file_tar, header = TRUE, sep = " ")

数据分析的代码,仅调用代码路径,不运行代码过程:

file_tar <- here("code/eda/eda-demo.R")
source(file_tar)

数据分析的结果,不运行代码过程,直接使用已经保存好的分析结果.Rdata,进行相关展示:

file_tar <- here("code/eda/result-smry.Rdata")
load(file_tar)
kable(smry_dt, align = "c")
kable(smry_dt, align = "c")
表 6.1: 数据平均运算新(示例数据)
(a) 示例数据
index weight
2.5 40.25
(b) another
index weight
2.5 40.25

6.5 计算缓存

可以通过freezecache两个参数进行设置。