14.5 以前のコードチャンクのグラフを修正する

knitr はデフォルトでは, コードチャンクごとに新規にグラフィックデバイスを開いてグラフを記録しています. これは1つ問題を起こしています. グラフィックデバイスが既に閉じられているため, 以前のコードチャンクで作成されたグラフを簡単には修正できないという問題です. base R のグラフィックではたいていの場合で問題となります. なお ggplot2 (Wickham, Chang, et al. 2021) のような grid ベースのグラフィックは, グラフを R オブジェクトとして保存できるので当てはまりません. 例えばあるコードチャンクでグラフを描き, 後のチャンクでグラフに線を描き足そうとしても, R は高水準グラフがまだ作られていないというエラーを示すので, 線を描き足すことができません.

全てのコードチャンクでグラフィックデバイスを開いたままにしたいなら, 文書の冒頭で knitr パッケージのオプションである を設定します.

knitr::opts_knit$set(global.device = TRUE)

より頻繁に使われる opts_chunk ではなく opts_knit が使われていることに注意してください. 例は Stack Overflow の https://stackoverflow.com/q/17502050 という投稿で見ることもできます.

グローバルなグラフィックデバイスを必要としなくなった時は, オプションを FALSE に設定できます. これは完全な例です.

---
title: "グラフの保存にグローバルグラフィックデバイスを使用する"
---

まず, グローバルグラフィックデバイスを有効にします.

```{r, include=FALSE}
knitr::opts_knit$set(global.device = TRUE)
```

グラフを描画します.

```{r}
par(mar = c(4, 4, 0.1, 0.1))
plot(cars)
```

以前のコードチャンクのグラフに線を追加します.

```{r}
fit <- lm(dist ~ speed, data = cars)
abline(fit)
```

グローバルデバイスを切ります.

```{r, include=FALSE}
knitr::opts_knit$set(global.device = FALSE)
```

別のグラフを描画します.

```{r}
plot(pressure, type = 'b')
```

参考文献

Wickham, Hadley, Winston Chang, Lionel Henry, Thomas Lin Pedersen, Kohske Takahashi, Claus Wilke, Kara Woo, Hiroaki Yutani, and Dewey Dunnington. 2021. Ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. https://CRAN.R-project.org/package=ggplot2.