QuartoのTips (R版)

Quartoを使うときのTipsのうち、R (knitr)特有の設定などについて紹介する。
knitr
R
Quarto
Published

July 24, 2024

Modified

August 29, 2024

R (knitr)特有の設定などについて紹介する。

Chunk options

class-output, class-warning, class-message, class-error

Chunkのコードを実行して、コンソールに現れる文字列を表示するCSSを指定する。

styles.css

.stdout {
  color: #000000;
  background-color: #FFFFFF;
  border: 1px solid #000000;
  border-radius: 5px;
  padding: 8px;
  margin: 5px;
}

.stderr {
  color: #FF6262;
  font-weight: 900;
  background-color: #2D2D2D;
  border-radius: 0px;
  padding: 8px;
  margin: 5px;
}
```{r}
#| class-output: stdout
print("Hello")
```
[1] "Hello"
```{r}
#| error: true
#| class-error: stderr
stop("This is an error.")
```
Error in eval(expr, envir, enclos): This is an error.

eval

evalオプションに渡す真偽値(true or false)をRの式の評価結果に変更する。

参考:

メモ:Quartoで #| を使ってチャンク内にチャンクオプションを書く時に !expr がエラーになった(がもう直っている) - Technically, technophobic.

知らない人もいるかもなので、まず「#| を使ってチャンク内にチャンクオプションを書く」とは?、という話から。

https://notchained.hatenablog.com/entry/2022/04/30/214805

```{r}
#| eval: !expr 1 > 0
print("evaluated")
```
[1] "evaluated"
```{r}
#| eval: !expr 1 > 2
print("not evaluated")
```

ただし式が!から始まっている場合は引用符で囲む必要がある。

```{r}
#| eval: !expr !FALSE
# 👆これはダメ❌
```
```{r}
#| eval: !expr "!FALSE"
# 👆これは大丈夫⭕️
print("evaluated")
```
[1] "evaluated"

fig-width, fig-height

出力する図の物理的な(表示上ではない)大きさを制御する。 単位がinchなのでmmに換算するには1 inch = 25.4 mmなので25.4で割る。 ファイルに書き出す図と見た目を揃えたい時に使える。

library(ggplot2)
gp <-
  ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(aes(color = Species)) +
  theme_minimal()
```{r}
#| fig-width: !expr "150/25.4"
#| fig-height: !expr "100/25.4"
# 幅 150 mm 高さ 100 mm のプロットとして出力
gp
```

```{r}
#| fig-width: !expr "300/25.4"
#| fig-height: !expr "200/25.4"
# 幅 300 mm 高さ 200 mm のプロットとして出力
gp
```

# 同じサイズでファイルに出力したプロットと見栄えが同じになる。
ggsave("output.png", gp, width = 150, height = 100, units = "mm")

rm output.png

results

コードのテキスト出力の表示をコントロールする。 resultsには、markup, asis, hold, hideのいずれかを指定できる。

#| results: markup
デフォルトの設定

print(1:3)
[1] 1 2 3
cat("<p style='color: purple'> **bold** *italic* </p>")
<p style='color: purple'> **bold** *italic* </p>

#| results: asis
HTMLやMarkdownとして描画させられる

print(1:3)

[1] 1 2 3

cat("<p style='color: purple'> **bold** *italic* </p>")

bold italic

#| results: hold
出力を最後にまとめる

print(1:3)
cat("<p style='color: purple'> **bold** *italic* </p>")
[1] 1 2 3
<p style='color: purple'> **bold** *italic* </p>

#| results: hide
表示させない。falseでもよい。

print(1:3)
cat("<p style='color: purple'> **bold** *italic* </p>")

これは仕様なのかバグなのかよくわからないが、#| echo: fencedを指定していると、 #|results: markupでも分割されずに#| results: holdと同じ挙動になる。

#| echo: fencedなし

print(1:3)
[1] 1 2 3
cat("<p style='color: purple'> **bold** *italic* </p>")
<p style='color: purple'> **bold** *italic* </p>

#| echo: fencedあり

```{r}
#| results: markup
print(1:3)
cat("<p style='color: purple'> **bold** *italic* </p>")
```
[1] 1 2 3
<p style='color: purple'> **bold** *italic* </p>

Working directory

setwd()でworking directoryを変更しても、chunkごとにworking directoryはリセットされる。

setwd("..")
getwd()
[1] "/Users/t_arae/blog/posts/2024"
getwd()
[1] "/Users/t_arae/blog/posts/2024/2024-07-24-quarto-r-coding-tips"

Sessioninfo

sessionInfo()
R version 4.3.2 (2023-10-31)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Tokyo
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
[1] ggplot2_3.5.1

loaded via a namespace (and not attached):
 [1] vctrs_0.6.5      cli_3.6.3        knitr_1.48       rlang_1.1.4     
 [5] xfun_0.46        png_0.1-8        generics_0.1.3   renv_1.0.10     
 [9] jsonlite_1.8.8   labeling_0.4.3   glue_1.7.0       colorspace_2.1-1
[13] htmltools_0.5.7  scales_1.3.0     fansi_1.0.6      rmarkdown_2.25  
[17] grid_4.3.2       evaluate_0.24.0  munsell_0.5.1    tibble_3.2.1    
[21] fastmap_1.1.1    yaml_2.3.9       lifecycle_1.0.4  compiler_4.3.2  
[25] dplyr_1.1.4      pkgconfig_2.0.3  farver_2.1.2     digest_0.6.34   
[29] R6_2.5.1         tidyselect_1.2.1 utf8_1.2.4       pillar_1.9.0    
[33] magrittr_2.0.3   withr_3.0.0      tools_4.3.2      gtable_0.3.5