<- here::here("R/load-pkgs.R")
file_tar source(file_tar)
6 底层体系
本章主要总结Quarto
的架构体系和运行逻辑,其中会重点与Rmarkdown生态(包括bookdown
、blogdown
等)进行比较。
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.36'
quarto
"C:\\PROGRA~1\\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代码文件
<- here("data/test-data.txt")
file_tar <- read.delim(file_tar, header = TRUE, sep = " ") dt
数据分析的代码,仅调用代码路径,不运行代码过程:
<- here("code/eda/eda-demo.R")
file_tar source(file_tar)
数据分析的结果,不运行代码过程,直接使用已经保存好的分析结果.Rdata
,进行相关展示:
<- here("code/eda/result-smry.Rdata")
file_tar load(file_tar)
kable(smry_dt, align = "c")
kable(smry_dt, align = "c")
index | weight |
---|---|
2.5 | 40.25 |
index | weight |
---|---|
2.5 | 40.25 |
6.5 计算缓存
可以通过freeze
和cache
两个参数进行设置。
6.6 浏览器封装技术
6.6.1 webR封装
WebR
使用WebAssembl(wasm
)技术实现了R在浏览器上的独立运行,从而不依赖于本地客户机(参看官方文档)。
quarto项目下安装webr
扩展(参看github说明):
# terminal下运行
quarto add coatless/quarto-webr
6.6.2 shinylive技术
shinylive
是一个R包,借助它可以使得创建的shiny App完全可以独立运行在浏览器上(参看官方文档)。
(1)准备shinylive版本(version)、资源(assets)和缓存环境(参看说明)
```{r}
#| eval: false
# 安装R包
install.packages("shinylive")
# 参看信息
shinylive::assets_info()
# shinylive R package version: 0.1.0
# shinylive web assets version: 0.2.1
# 下载资源到本地,需要一定耗时
shinylive::assets_download("0.2.1")
```
(2)quarto项目下安装shinylive
扩展(参看github说明):
# terminal下运行
quarto add quarto-ext/shinylive