quarto 教程 2:Computations

「写在前面」

学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度,分享官方文档的中文教程。软件可能随时更新,建议配合官方文档一起阅读。
1.quarto 教程 1:Hello, Quarto


目录

  • 1 概述
  • 2 单元输出
  • 3 代码折叠
  • 4 代码链接
  • 5 图
  • 6 多个图
  • 7 数据框
  • 8 行内代码
  • 9 缓存

官网教程:https://quarto.org/docs/get-started/computations/rstudio.html

1 概述

Quarto 支持 Markdown 中的可执行代码块。这使您可以创建完全可重现的文档和报告 - 生成输出所需的代码是文档本身的一部分,并且每当呈现文档时都会自动重新运行。

在本教程中,我们将向您展示如何在 RStudio 中使用 Quarto 创作完全可重现的计算文档。

如果您想在自己的环境中逐步进行操作,请下载下面的 Quarto 文档 (.qmd),在 RStudio 中打开它,然后单击「Render」(或使用键盘快捷键 ⇧⌘K)。我们建议还选中“Render on Save”框,以实时预览您的更改。

Download computations.qmd: https://quarto.org/docs/get-started/computations/_computations.qmd

请注意,您需要在 RStudio v2022.07 或更高版本中打开此文档,您可以在此处下载。

2 单元输出

默认情况下,代码及其输出显示在渲染的文档中。

alt

但是,对于某些文档,您可能希望隐藏所有代码并仅显示输出。为此,请在 YAML 的 execute 选项中指定 echo: false

---
title: "Quarto Computations"
execute:
echo: false
---

如果您之前选中了 「Render on Save」,则只需在进行此更改后保存文档即可进行实时预览。否则渲染文档以查看反映的更新。结果如下所示。

alt

您可能希望有选择地为某些单元启用代码 echo。为此,请添加 echo: true 单元选项。使用标记为 scatterplot 的代码块尝试此操作。

#| label: scatterplot
#| echo: true

ggplot(mpg, aes(x = hwy, y = cty, color = cyl)) +
geom_point(alpha = 0.5, size = 2) +
scale_color_viridis_c() +
theme_minimal()

再次保存文档,请注意,代码现在已包含在 scatterplot 代码块中。

alt

echo 选项可以设置为 truefalsefenced。最后一个可能对于编写文档和教材特别感兴趣,因为它允许您在代码输出中包含受隔离的代码分隔符,以强调可执行代码需要该分隔符。您可以在 Fenced Echo 文档中阅读有关此选项的更多信息。

还有大量其他选项可用于单元输出,例如用于显示/隐藏警告的 warning(这对于包加载消息特别有帮助),include 防止包含任何输出(代码或结果)在输出中,以及 error 防止代码执行中的错误停止文档的渲染(并在渲染的文档中打印错误)。

有关更多详细信息,请参阅 Knitr Cell Options 文档。

3 代码折叠

您可能希望折叠代码并允许读者自行查看,而不是完全隐藏代码。您可以通过 code-fold 选项来完成此操作。删除我们之前添加的 echo 选项并添加 code-fold HTML 格式选项。

---
title: "Quarto Computations"
format:
html:
code-fold: true
---

再次保存文档,请注意,现在每个代码块都包含新的 Code widgets。

alt

您还可以提供对代码折叠的全局控制。尝试添加 code-tools: true 到 HTML 格式选项。

---
title: "Quarto Computations"
format:
html:
code-fold: true
code-tools: true
---

保存文档,您将看到渲染文档的右上角出现一个代码菜单,它提供对显示和隐藏所有代码的全局控制。

alt

4 代码链接

code-link 选项可以将代码块内的函数超链接到其在线文档。尝试将 code-link: true 添加到 HTML 格式选项。

---
title: "Quarto Computations"
format:
html:
code-link: true
---

保存文档并观察函数现在是可单击的超链接。

alt

请注意,目前代码链接仅通过 downlit 包针对 knit 引擎实现。如果 code-line-numbers 和/或 code-annotations 也为 true,则 downlit 限制会阻止当前的代码链接。

5 图

我们可以改善绘图的外观和可访问性。我们可以通过设置 fig-widthfig-height 来改变它的宽高比,提供 fig-cap,修改它的 label 以进行交叉引用,并使用 fig-alt 添加 alternative text

我们将添加以下代码块选项。

#| label: fig-scatterplot
#| fig-cap: "City and highway mileage for 38 popular models of cars."
#| fig-alt: "Scatterplot of city vs. highway mileage for cars, where points are colored by the number of cylinders. The plot displays a positive, linear, and strong relationship between city and highway mileage, and mileage increases as the number of cylinders decreases."
#| fig-width: 6
#| fig-height: 3.5

保存文档以查看更新后的绘图。请注意,我们还使用以下内容更新了对该图的 cross reference 的叙述。

@fig-scatterplot shows a positive, strong, and linear relationship between the city and highway mileage of these cars.
alt

6 多个图

让我们向代码块中添加另一个图 -- 一个散点图,其中的点使用不同的 color scale 根据 engine displacement 进行着色。我们的目标是并排显示这些图(即,在两列中),并为每个图添加描述性小标题。由于这将产生更广泛的可视化效果,我们还将使用 column 选项将其布局在整个页面上,而不是局限于正文文本列。

这个代码块有很多变化。要继续操作,请将下面列出的选项复制并粘贴到您的 Quarto 文档中。

#| label: fig-mpg
#| fig-cap: "City and highway mileage for 38 popular models of cars."
#| fig-subcap:
#| - "Color by number of cylinders"
#| - "Color by engine displacement, in liters"
#| layout-ncol: 2
#| column: page

ggplot(mpg, aes(x = hwy, y = cty, color = cyl)) +
geom_point(alpha = 0.5, size = 2) +
scale_color_viridis_c() +
theme_minimal()

ggplot(mpg, aes(x = hwy, y = cty, color = displ)) +
geom_point(alpha = 0.5, size = 2) +
scale_color_viridis_c(option = "E") +
theme_minimal()

此外,将描述可视化的现有文本替换为以下内容。

The plots in @fig-mpg show the relationship between city and highway mileage for 38 popular models of cars.
In @fig-mpg-1 the points are colored by the number of cylinders while in @fig-mpg-2 the points are colored by engine displacement.

然后,保存文档并检查渲染的输出,其应如下所示。

alt

让我们讨论一下这里使用的一些新选项。您以前见过 fig-cap,但我们现在添加了 fig-subcap 选项。

#| fig-cap: "City and highway mileage for 38 popular models of cars."
#| fig-subcap:
#| - "Color by number of cylinders"
#| - "Color by engine displacement, in liters"

对于具有多个输出的代码单元,添加 fig-subcap 选项使我们能够将它们视为子图。

我们还添加了一个选项来控制多个图形的布局方式 -- 在本例中,我们在两列中并排指定。

#| layout-ncol: 2

如果面板中有 3 个、4 个或更多图形,则有许多选项可用于自定义其布局。有关详细信息,请参阅文章 Figure Layout

最后,我们添加了一个选项来控制图形占据的页面跨度。

#| column: page

这使得我们的图形显示可以超出正常的正文文本列。请参阅 Article Layout 文档,了解所有可用的布局选项。

7 数据框

您可以使用 df-print 文档选项控制默认情况下打印数据框的方式。可用选项包括:

OptionDescription
defaultUse the default S3 method for the data frame.
kableMarkdown table using the knitr::kable() function.
tibblePlain text table using the tibble package.
pagedHTML table with paging for row and column overflow (implemented using rmarkdown::paged_table())

例如,这里我们指定要对数据框进行 paged 打印:

---
title: "Document"
format:
html:
df-print: paged
---

8 行内代码

要在 markdown 中包含可执行表达式,请将表达式括在r 中。例如,我们可以使用内联代码来说明数据中的观察数量。尝试将以下 Markdown 文本添加到您的 Quarto 文档中。

There are `r nrow(mpg)` observations in our data. 

保存文档并检查渲染的输出。反引号内的表达式已被执行,并且句子包含实际的观察数。

There are 234 observations in our data.

如果要内联的表达式更复杂,涉及许多函数或管道,我们建议将其包含在代码块中(使用 echo: false)并将结果分配给对象。然后,您可以在内联代码中调用该对象。

例如,假设您想要在数据中说明城市和高速公路的平均里程。首先,计算代码块中的这些值。

#| echo: false

mean_cty <- round(mean(mpg$cty), 2)
mean_hwy <- round(mean(mpg$hwy), 2)

然后,将以下 Markdown 文本添加到您的 Quarto 文档中。

The average city mileage of the cars in our data is `r mean_cty` and the average highway mileage is `r mean_hwy`. 

保存文档并检查渲染的输出。

The average city mileage of the cars in our data is 16.86 and the average highway mileage is 23.44.

9 缓存

如果您的文档包含计算时间过长的代码块,您可能需要缓存这些代码块的结果。您可以使用 YAML 执行选项在文档级别使用 cache 选项。

execute:
cache: true

然而,缓存文档中的所有代码块可能并不可取。您还可以使用代码块选项来指示应直接缓存哪些代码块。

#| cache: true

尝试将此代码块选项添加到文档中生成绘图并保存的代码块之一。渲染文档时,您将看到工作目录中已创建一个新文件夹,其名称与文档相同,后缀为 _cache。该文件夹包含缓存的结果。您可以在 Cache 文档中找到有关 Quarto 文档中缓存的更多信息。

如果您按照本教程的步骤进行操作,那么您现在应该拥有一个 Quarto 文档,该文档实现了我们所涵盖的所有内容。否则,您可以下载下面的 computations.qmd 的完整版本。

Download computations-complete.qmd: https://quarto.org/docs/get-started/computations/_computations-complete.qmd


「结束」

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TigerZ 生信宝库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值