我一直在try RStudio的新的quarto工具,似乎无法完成在旧版本的R NotebookR Markdown替代版本中可以做到的事情.

我想通过几个Quarto文档(.qmd)来组织我的工作流,并且我想生成.html文档,以便与非R用户共享.例如,假设我有以下4个文档:

  • 01_DataProcessing.qmd
  • 02_STATISTICALAnalysis.qmd
  • 03_plots.qmd
  • 04_Reports.qmd

01_DataProcessing.qmd个中,我清理和组织要在其他三个文件中使用的所有数据.因此,其他三个文件依赖于01_DataProcessing.qmd个,*01_DataProcessing.qmd必须首先运行,这样其他文件才能运行.在RStudio中,这非常有效,因为所有.qmd文件都可以访问环境中的所有数据.

然而,当我想要生成.hmtl文件时,我必须"render"个.qmd文件.这就是我发现问题的地方.渲染似乎忽略了全局环境中的所有变量(以及所有已加载的库),因此显示AND ERROR(Execution halted).这意味着我只能使用包含所有代码的独立文档,这对于大型工作流来说可能是个问题.

我是不是遗漏了什么?我需要更改某些设置吗?有什么解决办法吗?如何指定.qmd使用全局环境中的所有可用数据?

请注意,将最新版本的RStudio更改为.rmd并不能解决问题,因为其行为与.qmd文档相同.另外,请不要说过go 不是这样的.

编辑

为了给出一个可重现的例子,假设在第一个qmd个文件01_DataProcessing.qmd个中,我已经创建了一个数据帧TestData,并且我想使用03_plots.qmd个文件中的TestData

01_DataProcessing.qmd

---
title: "01_DataProcessing"
format: html
editor: visual
---

```{r}
library(tidyverse)
library(magrittr)

TestData <- data.frame(
  x = c(1, 2, 3, 4, 5, 6, 7),
  y = c(1 ,2 ,3, 4, 5, 6, 7))
```

03_plots.qmd

---
title: "03_Plots"
format: html
editor: visual
---

If you try to render the file the execution is halted because the object TestData is not found. 

```{r}
plot(TestData$x, TestData$y)
```

推荐答案

一种方法可以是将来自第一个qmd文件的r个对象保存在.Rdata文件中,然后在第二个qmd文档的最开始处加载该.Rdata文件,并且还使用包含所有库调用的R脚本文件,并在每个qmd文件的开始处源化该R脚本文件.

现在假设所有这些相关文件都在同一目录(即文件夹)中,


globals.R

globals.R文件包含所有必需的库调用,并且可能包含我们希望在每个qmd文件中使用的公共r对象(向量、数据、帧等)和公共r选项,我们将在每个qmd文件的开头编写此r脚本文件的源代码.

library(tidyverse)
library(magrittr)

01_DataProcessing.qmd

我们保存TestData1TestData2数据.将data_process.Rdata文件中的对象框起来,以便我们可以在以后的文件中使用它们.

---
title: "01_DataProcessing"
format: html
---

```{r}
#| label: setup-globals
#| include: false

source("globals.R")
```

```{r}
TestData1 <- data.frame(
  x = c(1, 2, 3, 4, 5, 6, 7),
  y = c(1 ,2 ,3, 4, 5, 6, 7)
  )

TestData2 <- data.frame(
  x = 6:10,
  y = 6:10
  )
```

```{r}
#| include: false

save(TestData1, TestData2, file = "data_process.Rdata")
```

03_Plots.qmd

在这个文件中,我们可以加载data_process.Rdata个文件以及TestData1TestData2个数据.Frame对象可供使用.

---
title: "03_Plots"
format: html
---

```{r}
#| label: setup
#| include: false

source("globals.R")
load("data_process.Rdata")

```

```{r}
plot(TestData1$x, TestData1$y)
plot(TestData2$x, TestData2$y)
```

现在我们可以按顺序呈现这些文件,一切都按预期进行(希望如此!).

现在来补充一些建议

  • 如果我们设置一个包含这些文件的RStudio项目,我们可以使用特定于项目的.Rprofile而不是像Done in this answer on SO那样的全局R文件,这样我们就不必在每个qmd个文件中寻找r-脚本文件.

  • 如果我们只想在顺序文件之间传递data.Frame,我们还可以将这些data.Frame作为CSV文件写入项目目录内的特定数据目录中,并在以后的文件中读取它们(在这种情况下,许多人推荐使用{here}包)

R相关问答推荐

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

R中的枢轴/转置

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

过滤器数据.基于两列的帧行和R中的外部向量

提取具有连续零值的行,如果它们前面有R中的有效值

如何在R中描绘#符号?

plotly hover文本/工具提示在shiny 中不起作用

按多列统计频次

按时间顺序对不同事件进行分组

将向量元素重新排序为R中的第二个

在数据帧列表上绘制GGPUP

如何使用For-R循环在向量中找到一系列数字

如何构建一个for循环来循环处理动物ID?

网络抓取新闻标题和时间

整理曲线图、曲线图和点图

按镜像列值自定义行顺序

如何在shiny 的应用程序 map 视图宣传单中可视化单点

分隔日期格式为2020年7月1日

把代码写成dplyr中的group_by/摘要更简洁吗?