以不同顺序评估 Rmd 中的代码块

Evaluate code chunks in Rmd in different order

我有一个代码块“data_prep”,它包含在我的 Rmd 文件的末尾,但我想在开头(标题 1 之后)显示它的结果。问题是代码块“data_prep”需要在运行之前名为“data_summary”的块(data_summary取决于data_prep).

如何更改代码块的计算顺序?

---
title: "Untitled"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
```

```{r}
library(dplyr)
```

# 1

```{r data_summary, ref.label='data_prep'}
```

# 2

```{r}
df_1 <- mtcars %>% sample_n(10)
```

# 3

```{r data_prep, results='hide'}
mtcars_summary <- df_1 %>% 
  group_by(cyl) %>% 
  summarise(hp_avg = mean(hp))

mtcars_summary
```

我还尝试了以下两种变体:

```{r data_prep, echo = TRUE}
```

```{r data_summary, dependson='data_prep'}
```

那不是 dependson 的工作方式。它用于指定 代码块 代码块所依赖的代码块,因此如果被缓存,它会在这些依赖项更新时更新。然而,RMarkdown 有一种方法可以使用缓存来做你想做的事。如果需要,我们可以缓存任何块并在更早的块中调用它。仅修改示例中的两个相关块(其余未修改),我们可以:

```{r data_summary}
knitr::load_cache("data_prep", "mtcars_summary")
```
## # A tibble: 3 × 2
##     cyl hp_avg
##   <dbl>  <dbl>
## 1     4   84.3
## 2     6  116. 
## 3     8  191

```{r data_prep, results = "hide", cache = TRUE}
mtcars_summary <- df_1 %>% 
  group_by(cyl) %>% 
  summarise(hp_avg = mean(hp))

mtcars_summary
```