ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

[書評] RユーザーのためのRStudio「実践」入門

この記事は最終更新日から3年以上が経過しています


はじめに

(ごめんやっぱ半分以上書評じゃなくて日記だった)

松村優哉・湯谷啓明・紀ノ定保礼・前田和寛著『RユーザーのためのRStudio「実践」入門』(技術評論社, 2版) をいただいたので書評をする.

(Amazonのリンクを貼ると私にアフィリエイト収入の可能性があるのだが, 最近思うことあってなるべく版元のリンクにしようかなとか考えている)

もう既にレビューをブログに投稿し, 初版との違いにも言及する人もいる1が, 私は初版を持ってないのでこの点はなんとも言えない.


本書の特徴

本書は RStudio というより, RStudio + tidyverse の本である. 執筆当時最新の RStudio (v1.4.1103) と tidyverse を中心としたパッケージ群を紹介し, 最近の R環境の数々の便利な機能を知ることができるだろう.

  • v1.4 になりさらに充実した RStudio の UI
  • R によるスクレイピング
  • (dplyr v1.0.0 の新しい構文に対応した) tidyverse によるデータフレームおよび tibble の加工と集計
  • ggplot2 パッケージによるグラフの作成
  • R Markdown や HTML ウィジェットを使用したレポーティング
  • その他, 正規表現とか日付処理とか, 頻繁に出てくる処理の対処

というように. このように広い範囲に言及した本はそうないだろう.

(とはいえ私はこの手の「入門書」を全く持ってないので比較対象を実は詳しく知らない)


初心者はどう学んでいくといいか

R-wakalang には日々質問が投稿されるが, 単に眼前の問題に回答するだけでは根本的な解決にならないのではないかと感じる機会がそれなりにある. 本当に R を使い始めたばかりで, まだ使い方を体系的に学んでいない, 断片的なコードをコピーペーストして動かしているため応用ができないような状態の質問者だ. こういう場合, 基本的な用語も理解していないか, もしかすると誤解していることもあり, テキストだけで質問者の状況を正確に把握して回答するのに時間がかかり, お互いにストレスがたまることもあろう (解決さえできれば当てずっぽうな回答を繰り返すだけでもよいという考え方もあるが, 体系的に理解するという観点ではよろしくないのではないか). 技術的な質問に答えるとき, 相手もそれなりに知識があるか, そうでないかわからないとき, まず認識共有をするためのコストは意外と無視できないと思う.

このように初心者は質問するよりも足がかりになる解説書を少しばかり読んでもらったほうが効率が良い (あくまで質問者にとっての効率さ. 初歩的すぎる質問をするなという意味ではなく, 追加の選択肢の提示) こともありうるので, 私はプライベートチャンネルに初歩的なことから説明しているサイトのURLをいくつかメモしている. 質問内容によっては必要に応じてそういうサイトを回答に添えて紹介しているのだが, 基本的な操作について単体で完結した資料があまりない. 例えば昔から存在する竹澤先生のWebページや間瀬先生の基本関数マニュアルは, Rの基本関数の解説の充実した資料だが, ここ数年で急速に発展した tidyverse 関連のことは何も書かれていない. それ以外にも, ggplot2dplyr といった特定の特定のパッケージに限定すれば, 有用なネット上の資料はそれなりに存在するが, オールインワンといえる資料はとてもまれである.

書籍を紹介したところで必ずしも買ってくれるかはわからない (そもそも仕事でやむなく使っただけで, R の長くお付き合いする予定ですらないかもしれない) が, とりあえずこれを読み, それを足がかりに少しづつ知識を広げておけと言える資料が増えるのは良いことである. 初心者は英語で検索する習慣がまだ身についていない事も含め, 情報を自分で探索することにもまだ習熟していないことが多いが, 本書はより詳細な文献もそれなりに紹介している2.


問題点 (本書に限らない一般論?)

さて, 人から本をもらう立場になったからこそ, 私は手放しに褒めるようなことはなるべくしないように心がけている.

専門的な内容を大量に書くより, 限られた紙面で初心者に対して要点を伝えるほうが間違いなく難しいと私は考えている. あれも書いてほしい, これが書いてない, ということはいくらでも言えるが, 制約下での取捨選択はとても難しい. しかし, もちろん著者にはそれをこなすことが期待されているが.

なので論点をなるべく絞って話そう. 本書が初心者に向けて書かれたものであることは明白であり, さらに『「実践」』と冠しているからには, 実際に動作するように最低限のサポートをするべきだ, という立場で指摘する.

そうなると, 最も私が気になるのは以下の1点である.3


OS間の違いに対するサポート

Windows 上で R を動かす際にはロケールごとの文字コードの違いに由来する不具合がいくつか存在する. 私自身も不具合を訴える Windows ユーザーに対して, 直接動かすよりは WSL や docker などの仮想環境や, AWS 上での RStudio Server, RStudio Cloud, あるいは Google Colab (これは本格的に使うには厳しいかもしれないが) などのクラウド環境上で動かすことを折りに触れては提案している. そうでなくとも, せめてもう少し予防線があったほうがいいのではないかと感じる4.

不具合の例として:

  • 本書でも触れている, “Import Dataset” の機能は, 日本語 (マルチバイト文字) を含むファイルパスからうまく読み取れない5 とか, ファイルパス絡みの問題がある.

  • OneDrive 上のファイルの扱い. 上記のファイルパスの問題に加え, OneDrive と RStudio の挙動が競合しているのではないか, という指摘はよく見かける.

(R-wakalang でも, 日本語版スタックオーバーフローでもこの手の問題に関する投稿は良く見かけるので, 最近は私はむしろ Windows 上で R 本体や RStudio のバージョンを何度も変えて直接インストールして動作確認をすることが増えてきている)

本書では2章にスクレイピングのために docker を使用する例が言及されている (Web上にも簡単な導入方法が書かれている) が, 例えばこれを selenium の使用目的に留めるのではなく, docker環境を前提として前面に出す構成にしてもよかったのではないか (ただし docker は準備が面倒なので WSL のほうが良いとは思う), という気もする. たとえば以下のようなR用の docker イメージも配布されている.

というわけで対処法をまとめた

ill-identified.hatenablog.com


以降はもはやただの日記

本書の表紙裏にも注意書きがあるし, 執筆時点でおそらく最新の情報を反映するようにかなりの努力を払っているように見える.
昨年夏の更新で dplyr v1.0.0 で導入された多くの革新的な構文の紹介, スライドウィンドウ処理 (移動平均とか) に柔軟に対処できる slider パッケージ6, 脚注でさりげなく触れられているのみではあるが, リリースされたばかりの ragg パッケージ v1.1.0 の新機能の存在.

そして以前にも言ったように, 開発のさかんな tidyverse という OSS の変化の速さ. 例えば私が最近 twitter で投稿したように7, Hadley8 が執筆陣に名を連ねている『Rで始めるデータサイエンス』 (“R for Data Science""”) ですら, 出版後のパッケージ更新によって一部が時代遅れとなってしまった. あまりに細かい記述は, かえってパッケージの進歩によってすぐに台無しになってしまうことすらありうる (極端な例: 以前9言及したように, 実際に動作確認したのかも怪しい用例が何年も残っていることもある.). 機械学習ではないが, 現在に対する最適化(エンジニアは「ベストプラクティス」とよく呼ぶ)は必ずしも将来に対しても良いとは限らない. これは「非公式の解説」の宿命だろう. そして多くの場合, 現時点では, あるいは将来においてもより適切な記述は公式ドキュメントである. そういう状況で我々は何ができるのか.

(そして最近は, 「初心者向けの解説を書く」べきか, その時間を「初心者でも使いやすいインターフェイス開発やバグフィックスをする」時間にあてるべきか悩むことも多い」つまり, もうすでに私の思考は「本書」よりも主語が大きくなってるし, さらにはもはや参考書を書くという話から飛躍している)




  1. 例えば https://uribo.hatenablog.com/entry/2021/06/01/214031↩︎

  2. この手の技術書は参考文献をほとんど紹介していない事が多い. そういう本は書かれている以上の知識を得にくいので, まるで俺のノウハウだけを学べ, と言っているような傲慢さを勝手に感じ取ってしまうので好きではないし, 人に勧めづらい.↩︎

  3. これだけに絞って書こうと思ったが, select, filter, lag のような dplyr パッケージの競合しやすい関数の問題に一切触れてないのも不親切だなと思ったのでここで追記しておく.↩︎

  4. 本文ではCP932エンコードCSVファイルを開く方法, および R Markdown を扱う際の注意点としてのみ言及されるが, RStudio 本体の機能の制約には言及されていない.↩︎

  5. https://ja.stackoverflow.com/questions/75775/rstudio-%e3%81%a7-csv-%e3%81%ae-dateimport-%e3%81%8c%e5%87%ba%e6%9d%a5%e3%81%aa%e3%81%84↩︎

  6. ただし, slider パッケージに触れるならまず RcppRoll を紹介すべきではないか↩︎

  7. このツリー: https://twitter.com/ill_Identified/status/1391977299545710595↩︎

  8. Hadley Wickham, RStudio に所属する, tidyverse 等のパッケージ開発の中心人物↩︎

  9. https://ill-identified.hatenablog.com/entry/2020/10/03/200618↩︎