1 編集前記・技術注記

本章では、このハンドブックの制作におけるアプローチの哲学、スタイル、具体的な編集上の留意項目について説明します。

1.1 アプローチとスタイル

本書の潜在的な読者層は広いと考えています。R を初めて使う人はもちろん、より良い R の使い方やそのヒントを探している経験豊富な R ユーザーにもきっと役立ててもらえるはずです。そのため、本書は理解しやすく、簡潔である必要があり、R に慣れていない人でもコードを適用し、コードが何をしているのかをたどることができるよう、十分な説明を行うことを心がけました。

その他のポイント

  • 本書は、比較的簡単な事例を用いたコードの参考書であり、R やデータサイエンスの完全な教科書ではありません。
  • 本書は、応用疫学で R を使用するためのハンドブックであり、応用疫学の手法や科学に関するマニュアルではありません。
  • それぞれのタスクに最適な R のパッケージは頻繁に変わるため、このハンドブックでどのパッケージの使用を重視するかに関する議論を歓迎します。

R パッケージ

多くの選択肢

R の学習で最も難しいことの 1 つは、特定のタスクに対してどの R パッケージを使うべきかを把握することです。あるタスクで悪戦苦闘しているうちに、「あれ、1 つのコマンドで全部やってくれる R パッケージがあるじゃないか!」と気づくことはよくあります。

このハンドブックでは、各タスクを完了するために少なくとも 2 つの方法を用いるようにしています。1 つは試行錯誤を重ねた方法(おそらくbase R か tidyverse パッケージ)、もう 1 つはその目的のためにカスタマイズされた特別な R パッケージを使用する方法です。パッケージがダウンロードできない、あるいはうまく動作しない場合に備えて、いくつかの選択肢を用意しておきたいと思います。

使用するパッケージの選択にあたっては、一般的な利用者によってテストされ吟味されたもの、典型的な作業内で使用するパッケージの数が最小であるもの、安定しているもの(あまり頻繁に変更されない)、そしてシンプルかつ簡単にタスクを達成するパッケージと手法を優先的に選びました。

このハンドブックでは、一般的に tidyverse の R パッケージや関数を優先的に紹介します。tidyverse はデータサイエンスのために設計された複数の R パッケージを集めたものであり、含まれているパッケージは、基礎となる文法やデータ構造を共有しています。すべての tidyverse パッケージは、tidyverse パッケージを介してインストールまたは読み込むことが可能です。詳しくは tidyverse のウェブサイトをご覧ください。

また、本書の読者の中には、追加のパッケージをダウンロードするための信頼できるインターネット環境を利用できない方がいることを想定し、必要に応じて base R(R をインストールしたときに付属しているパッケージや関数)を用いた手法も紹介しています。

関数とパッケージの明示的な関連付け

R のチュートリアルで関数がコードで表示されても、それがどのパッケージのものかわからないとイライラすることがよくありますね! 私たちはこのような状況を避けようとしています。

本書では、説明する際にパッケージ名は太字で書き(例:dplyr)、関数は次のように書いています: mutate() 。また、関数がどのパッケージから来たものかを明示するために、文章内でパッケージを参照するか、dplyr::mutate() のようにコード内でパッケージを明示するようにしています。冗長に見えるかもしれませんが、あえてそのように書いています。

パッケージや関数について詳しく知りたい方は、Rの基礎 の章をご覧ください。

コードのスタイル

このハンドブックでは、以下の理由に基づき、頻繁に「改行」をいれて、コードを「縦長」に表示しています。

  • コードの細かい点について、コードのすぐ隣で # を使って説明コメントを書くことができる
  • 一般的に、長い(縦長の)コードの方が読みやすい
  • 狭い画面でも読みやすい(横スクロールが必要ない)
  • インデントにより、どの引数がどの関数に属しているかがわかりやすい

以下に例を挙げます。

linelist %>% 
  group_by(hospital) %>%  # 病院ごとのグループの列
  slice_max(date, n = 1, with_ties = F) # 日付が同じ場合は最初の行を採用する

本書のスタイルに従うと、上のコードは、次のように書きます。

linelist %>% 
  group_by(hospital) %>% # 病院ごとのグループの列
  slice_max(
    date,                # グループごとに日付の最大値を持つ行を保持する 
    n = 1,               # 最も上段の 1 列を保持する 
    with_ties = F)       # 日付が同じ場合は最初の行を採用する

R コードは通常、改行やインデントの影響を受けません。コードを書く際は、カンマの後で改行すると、自動的なインデントが適用されます。

また、スペースをたくさん使っている理由は、その方が読みやすいからです(例えば、n=1 ではなく n = 1 )。読み手に親切なコードを書きましょう!

用語解説

このハンドブックでは、一般的に「変数(variables)」や「観測値(observations)」ではなく「列(columns)」や「行(rows)」といった用語を使用します。この 「tidy data(データの前処理)」 の入門書で説明されているように、ほとんどの疫学統計データセットは、行(rows)、列(columns)、値(values)の構造で構成されています。

変数には、同じ基本属性(年齢層、転帰、発症日など)を測定した値が含まれます。観測値には、同じ単位(人、部位、実験試料など)で測定されたすべての値が含まれます。したがって、列や行と比較して、これらを具体的に定義することは困難であるでしょう。

「整理された」データセットでは、各列が変数、各行が観測値、各セルが 1 つの値です。しかし、あなたが扱うデータセットの中には、この型に当てはまらないものもあります。例えば、「横長」形式のデータセットでは、変数が複数の列にまたがっていることがあります(データの縦横変換 の章で例をご覧ください)。同様に、観測値も複数の行にまたがって分割されていることもあります。

このハンドブックの大部分は、データの管理と変換に関するものなので、抽象的な観測値や変数よりも、行や列といったより具体的なデータ構造に言及する方が適切です。例外は主にデータ解析の章で生じ、そこでは変数や観測値への言及が多くなります。

注釈

ここでは、このハンドブックで書かれている注釈の種類を紹介します。

注釈:これは注釈です
ヒント:これはヒントです
注意:これは注意事項です
警告:これは警告です

1.2 編集上の決定事項

以下では、パッケージや関数の選択に関して、編集上の重要な決定事項を記載しています。これらについて異なる意見がある場合や、新しいツールをご提供いただける場合は、こちらの Github ページに参加しメッセージをお送りください。

パッケージ、関数、その他の編集上の決定事項の表

項目 候補パッケージ・関数 推奨パッケージ・関数 簡単な説明
一般的なコーディング方法 tidyverse, data.table, base tidyversedata.table 関連の章で使用される。インターネットを持たない読者のための代替方法としては base を推奨 tidyverse 読みやすいコードや一般性の高いコードの作成のために使用される(一番教えられているパッケージ
パッケージの読み込み library(),install.packages(), require(), pacman pacman ほとんどのパッケージのインストールと読み込みにおいて、コードの短縮と簡素化を実現する
インポートとエクスポート rio, 他にも多数存在 rio 多くのファイルタイプに対応する手軽さ
要約統計のためのグループ化 dplyr group_by(), stats aggregate() dplyr group_by() tidyverse と同様に重要
縦横変換 tidyr (pivot 系関数), reshape2 (melt/cast), tidyr (spread/gather) tidyr (pivot 系関数) reshape2 は廃止され、tidyr は 1.0.0 版から pivot 系関数を使用
列名のクリーニング linelist, janitor janitor パッケージの集約を重視
時間データの取り扱い lubridate, aweek, tsibble, zoo lubridate 一般的なものと、特定のケースに対応するものとがある lubridate の柔軟性、一貫性、パッケージ維持の見通し
ggplot ラベル labs(), ggtitle()/ylab()/xlab() labs() すべてのラベルを一箇所でシンプルに修正
因子型への変換 factor(), forcats forcats さまざまな関数も同じコマンドで因子に変換
流行曲線(エピカーブ) incidence, ggplot2, EpiCurve incidence2 を素早く、ggplot2 を詳細に 信頼性
結合処理 paste(), paste0(), str_glue(), glue() str_glue() stringr 内にあり paste 関数よりもシンプルな構文

1.3 主な修正履歴

日付 主な変更点
2021 年 5 月 10 日 1.0.0 版の公開
2022 年11 月 20 日 1.0.1 版の公開

更新情報 1.0.1 版は以下の変更が適用されています。

  • R のバージョンを 4.2 に更新しました
  • データクリーニングと主要関数 : {linelist} パッケージから {matchmaker} パッケージへの変更、case_when() の例示コードから不溶な行を削除
  • 日付型データ : {linelist} パッケージの関数 guess_date() から {parsedate} パッケージの関数 parse_date() への変更
  • データの縦横変換 : pivot_wider()id_cols= 引数の小変更
  • 標本調査データ分析 : plot_age_pyramid() から age_pyramid() への変更、サンキー図(沖積図)をプロットするコードの小変更
  • ヒートマップ : agg_weeks オブジェクト生成コードに ungroup() を追加
  • 動的な図の作成 : agg_weeks オブジェクト作成時に tidyr::expand() が意図通りに機能するために ungroup() を追加
  • 時系列分析とアウトブレイクの検出 : すべての trending::fit()predict() 内のオブジェクトに対して data.frame() を追加
  • 複数回答データの分析 : case_when() から ifelse() への変更、データオブジェクト作成時に across() 引数を追加
  • 感染連鎖 : より新しいバージョンの {epicontacts} パッケージを利用するように変更

1.4 バージョン情報 (R・RStudio・パッケージ)

このハンドブックで使用した R、RStudio、R パッケージのバージョンに関する情報を以下に示します。

sessioninfo::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.3.2 (2023-10-31)
##  os       Ubuntu 22.04.3 LTS
##  system   x86_64, linux-gnu
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Etc/UTC
##  date     2023-12-28
##  pandoc   3.1.1 @ /usr/local/bin/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  ! package     * version date (UTC) lib source
##    BiocManager   1.30.22 2023-08-08 [1] CRAN (R 4.3.2)
##    bookdown      0.37    2023-12-01 [1] CRAN (R 4.3.2)
##    bslib         0.6.1   2023-11-28 [1] CRAN (R 4.3.2)
##    cachem        1.0.8   2023-05-01 [1] CRAN (R 4.3.2)
##    cli           3.6.2   2023-12-11 [1] CRAN (R 4.3.2)
##    colorspace    2.1-0   2023-01-23 [1] CRAN (R 4.3.2)
##    data.table    1.14.10 2023-12-08 [1] CRAN (R 4.3.2)
##    digest        0.6.33  2023-07-07 [1] CRAN (R 4.3.2)
##    downlit       0.4.3   2023-06-29 [1] CRAN (R 4.3.2)
##    dplyr       * 1.1.4   2023-11-17 [1] CRAN (R 4.3.2)
##    DT          * 0.31    2023-12-09 [1] CRAN (R 4.3.2)
##    evaluate      0.23    2023-11-01 [1] CRAN (R 4.3.2)
##    fansi         1.0.6   2023-12-08 [1] CRAN (R 4.3.2)
##    fastmap       1.1.1   2023-02-24 [1] CRAN (R 4.3.2)
##    forcats     * 1.0.0   2023-01-29 [1] CRAN (R 4.3.2)
##    fs            1.6.3   2023-07-20 [1] CRAN (R 4.3.2)
##    generics      0.1.3   2022-07-05 [1] CRAN (R 4.3.2)
##    ggplot2     * 3.4.4   2023-10-12 [1] CRAN (R 4.3.2)
##    glue          1.6.2   2022-02-24 [1] CRAN (R 4.3.2)
##    grates        1.1.0   2023-06-08 [1] CRAN (R 4.3.2)
##    gtable        0.3.4   2023-08-21 [1] CRAN (R 4.3.2)
##    here        * 1.0.1   2020-12-13 [1] CRAN (R 4.3.2)
##    highr         0.10    2022-12-22 [1] CRAN (R 4.3.2)
##    hms           1.1.3   2023-03-21 [1] CRAN (R 4.3.2)
##    htmltools     0.5.7   2023-11-03 [1] CRAN (R 4.3.2)
##    htmlwidgets   1.6.4   2023-12-06 [1] CRAN (R 4.3.2)
##    incidence2    2.2.3   2023-12-05 [1] CRAN (R 4.3.2)
##    janitor       2.2.0   2023-02-02 [1] CRAN (R 4.3.2)
##    jquerylib     0.1.4   2021-04-26 [1] CRAN (R 4.3.2)
##    jsonlite      1.8.8   2023-12-04 [1] CRAN (R 4.3.2)
##    knitr         1.45    2023-10-30 [1] CRAN (R 4.3.2)
##    lifecycle     1.0.4   2023-11-07 [1] CRAN (R 4.3.2)
##    lubridate   * 1.9.3   2023-09-27 [1] CRAN (R 4.3.2)
##    magrittr      2.0.3   2022-03-30 [1] CRAN (R 4.3.2)
##    memoise       2.0.1   2021-11-26 [1] CRAN (R 4.3.2)
##    munsell       0.5.0   2018-06-12 [1] CRAN (R 4.3.2)
##  P pacman        0.5.1   2019-03-11 [?] CRAN (R 4.3.2)
##    pillar        1.9.0   2023-03-22 [1] CRAN (R 4.3.2)
##    pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 4.3.2)
##    purrr       * 1.0.2   2023-08-10 [1] CRAN (R 4.3.2)
##    R.methodsS3   1.8.2   2022-06-13 [1] CRAN (R 4.3.2)
##    R.oo          1.25.0  2022-06-12 [1] CRAN (R 4.3.2)
##    R.utils       2.12.3  2023-11-18 [1] CRAN (R 4.3.2)
##    R6            2.5.1   2021-08-19 [1] CRAN (R 4.3.2)
##    readr       * 2.1.4   2023-02-10 [1] CRAN (R 4.3.2)
##    renv          1.0.3   2023-09-19 [1] CRAN (R 4.3.2)
##    rio         * 1.0.1   2023-09-19 [1] CRAN (R 4.3.2)
##    rlang         1.1.2   2023-11-04 [1] CRAN (R 4.3.2)
##    rmarkdown     2.25    2023-09-18 [1] CRAN (R 4.3.2)
##    rprojroot     2.0.4   2023-11-05 [1] CRAN (R 4.3.2)
##    rstudioapi    0.15.0  2023-07-07 [1] CRAN (R 4.3.2)
##    sass          0.4.8   2023-12-06 [1] CRAN (R 4.3.2)
##    scales        1.3.0   2023-11-28 [1] CRAN (R 4.3.2)
##    sessioninfo   1.2.2   2021-12-06 [1] CRAN (R 4.3.2)
##    snakecase     0.11.1  2023-08-27 [1] CRAN (R 4.3.2)
##    stringi       1.8.3   2023-12-11 [1] CRAN (R 4.3.2)
##    stringr     * 1.5.1   2023-11-14 [1] CRAN (R 4.3.2)
##    tibble      * 3.2.1   2023-03-20 [1] CRAN (R 4.3.2)
##    tidyr       * 1.3.0   2023-01-24 [1] CRAN (R 4.3.2)
##    tidyselect    1.2.0   2022-10-10 [1] CRAN (R 4.3.2)
##    tidyverse   * 2.0.0   2023-02-22 [1] CRAN (R 4.3.2)
##    timechange    0.2.0   2023-01-11 [1] CRAN (R 4.3.2)
##    tzdb          0.4.0   2023-05-12 [1] CRAN (R 4.3.2)
##    utf8          1.2.4   2023-10-22 [1] CRAN (R 4.3.2)
##    vctrs         0.6.5   2023-12-01 [1] CRAN (R 4.3.2)
##    withr         2.5.2   2023-10-30 [1] CRAN (R 4.3.2)
##    xfun          0.41    2023-11-01 [1] CRAN (R 4.3.2)
##    xml2          1.3.6   2023-12-04 [1] CRAN (R 4.3.2)
##    yaml          2.3.8   2023-12-11 [1] CRAN (R 4.3.2)
## 
##  [1] /opt/epiRhandbook_jp/renv/library/R-4.3/x86_64-pc-linux-gnu
##  [2] /root/.cache/R/renv/sandbox/R-4.3/x86_64-pc-linux-gnu/25ebdc09
## 
##  P ── Loaded and on-disk path mismatch.
## 
## ──────────────────────────────────────────────────────────────────────────────