在R Markdown中不同顺序评估代码块。

4

我有一个名为 "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'}
```
1个回答

2

这并不是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
```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接