Rユーザーの生産性を高める

RStudioが生産性を高める[後編] 〜アドインとカスタマイズによるコーディングの効率化

前編ではRStudioに標準で搭載されている便利な機能と、機能を手早く起動するコマンドパレットやキーボードショートカットについて紹介しました。後編ではアドインやRStudioの設定によって、自分好みの操作性を追求してみましょう。

アドインによる機能の拡張

RStudioの機能はアドインで拡張できます。アドインはパッケージの一部として定義されているので、パッケージがCRANに公開されていれば、install.packages関数で簡単にインストールできます。

本稿では、アドインによってコーディングを効率化する方法として、stylerパッケージによるコードの整形と、reprexパッケージによる再現可能なコードの実行例の作成の2つを紹介します。

コードの整形

フォーマッタを使ってコードを整形すると、コードの改行やスペース、インデントの入れ方、1行あたりの文字数などを、コーディング規約に適合させられます。一定のコーディング規約に則ったコードは、読み進めやすく、特に第三者がコードを読む際の助けになります。

R向けのコーディング規約として有名なものに、tidyverse版Googleによる派生版があります。一度は目を通して、日頃から意識的に従うと良いでしょう。

一方で完全に規約通りなコーディングは、煩わしく負担です。そこでフォーマッタを導入すると、コードの整形は機械に任せて、人はコーディングに集中できるようになります。

R言語向けの著名なフォーマッタにはstylerパッケージやformatRパッケージがあります。ここでは、アドインを提供しており、tidyverse版コーディング規約を採用しているstylerパッケージを紹介します。

stylerパッケージをインストールしてから、本連載の第1回で紹介したコマンドパレットを使って「Browse Addins」を開いてみてください。⁠Browse Addins」を選択すると、アドイン一覧が表示されます。検索窓から「styler」で絞り込みをかけると図1のように、いくつかのアドインが確認できます。実行するには、必要なものを選んで右下の「Execute」をクリックしてください。

図1 アドイン一覧から「styler」で検索した結果
図1

これでアドインを使えるようになりましたが、キーボードショートカットを使うと、毎回のようにアドインを検索する手間から解放されます。アドインの中でも「Style selection」だけはRStudioが最初からキーボードショートカットのCtrl+Shift+Aを割り当てています。Rコードを記述したファイル内の整形したい部分を選んでからキーボードショートカットを入力してみてください。たとえばa+b+cと書いてある部分に適用するとa + b + cに変わり、二項演算子の前後にスペースが加わります。

ところで、せっかくコーディング規約に従うのであれば、選択範囲だけではなく、ファイル全体を整形すべきでしょう。⁠Style active file」アドインを使うと、編集中のファイル全体を整形してくれます。しかし、このアドインにはキーボードショートカットが割り当てられていません。そこで、設定画面からキーボードショートカットのAlt+Sを割り当ててみましょう。設定画面を開くには、コマンドパレットから「Modify keyboard shortcuts」を選択してください。⁠style」で絞り込みをかけると、stylerパッケージ由来のアドインを絞り込めます図2⁠。デフォルトでは「Style active file」アドインのShortcut欄は空欄になっています。ここをクリックしてからWindowsではAlt+S、macOSではoption+Sを入力して、右下の「Apply」ボタンをクリックするとキーボードショートカットを登録できます。

図2 キーボードショートカットの設定画面。「styl」で絞り込みをかけている。
図2

「Style active file」アドインの実行結果は、ファイルを編集するのみで、保存はしません。保存も同時に行うには、以下のようにoptions関数を使った設定が必要です。

# stylerパッケージによる整形結果を自動で保存する
options(styler.save_after_styling = TRUE)

R起動時に自動設定したい場合はusethis::edit_r_profile関数を実行すると開くファイル内に、上記のコードを追記してください。

再現可能なコードと実行結果の共有

データの分析結果をコードと共に共有するにはR Markdownが便利です。R Markdownを使ったレポーティングに関してはRが生産性を高めるでも紹介しました。

レポーティング全体を見てもらう前に、もっと手軽にコード片の実行結果をコピー&ペーストで共有したい場面もあります。

  • エラーの原因を尋ねたい
  • 関数の使い方を伝えたい
  • 試しに分析してみた結果を共有したい

一方で、再現性が重要性であることに変わりはありません。相手に試してもらったときに結果が期待と異なると、双方の差異を探すためにコミュニケーションコストが増大します。

reprexパッケージは、指定したコードに対し実行結果を追記して、コピー&ペーストしやすい形式に出力します。パッケージ名は「reproducible example(再現可能な例⁠⁠」に由来し、コードの実行を現在のセッションから独立させることで、再現性を追求しています。たとえば、コンソール上で読み込んだパッケージがあったとしても、reprexパッケージに与えたコード内では改めて読み込む必要があります。これにより、第三者にコードを渡したときに、必要なパッケージの読み込みを確実に指示できます。変数や関数の定義についても同様です。

ではreprexパッケージをインストールして、アドインを試してみましょう。ggplot2パッケージのdiamondsデータセットの分析結果を部分的に共有する状況を考えます図3⁠。

図3 diamondsデータセットの分析レポート
図3

まず、図3の1つ目のチャンク(1.)を共有してみましょう。このチャンクはggplot2パッケージを読み込んだチャンク内で、ggplot2パッケージが提供するdiamondsデータセットを利用しているため、⁠再現可能な例」です。以下の手順に従うと、コードと実行結果がコピー&ペースト可能な状態で表示されます図4⁠。

  1. 必要な部分を選択する
  2. コマンドパレットを起動する
  3. コマンドパレットから「Reprex selection」を選択する
図4 reprexパッケージの適用例1
図4

次に、図3の散布図が表示されている2つ目のチャンク(2.)を共有してみましょう。1つ目のチャンクと同様の手順でアドインを適用してみましょう図5⁠。

図5 reprexパッケージの適用例2
図5

残念ながら次のようなエラーが発生しています。

#> Error in ggplot(diamonds): could not find function "ggplot"

2つ目のチャンクはggplot2パッケージ由来の関数ggplotなど)を使っています。パッケージの読み込みは1つ目のチャンクに依存しているため、2つ目のチャンク単体では「再現不能な例」になっています。これが上述のエラーの原因です。

実際に2つ目のチャンクの冒頭にlibrary(ggplot2)を加えると、⁠再現可能な例」になり、以下のように結果をコピー&ペーストできます。

library(ggplot2)
ggplot(diamonds) +
  aes(carat, price) +
  geom_point()

Created on 2022-08-07 by the reprex package (v2.0.1)

なお、作成した図はimgurという画像共有サービスにアップロードされます。URLを知っている人であれば誰でもアクセスできるので、取り扱うデータには注意してください。

その他のアドイン

本稿で紹介した以外にもアドインは多数あります。たとえばggThemeAssistパッケージには、ggplot2パッケージで作成したグラフの見た目を調整するアドインがあります。taskscheduleRパッケージやcronRパッケージには、スクリプトの定期実行を設定するアドインがあります。

どんなアドインがあるかを調べるには、Dean Attaliによる「Discover and install useful RStudio addins」を見てみるといいでしょう。

アドインを自作したければ、自作関数にキーボードショートカットを割り当てられる、shrtctsパッケージを使う方法が簡単です(参考:RStudioにショートカットを追加する(shrtctsパッケージ)⁠。本格的なアドインを自作するにはパッケージ開発をする必要があります公式ドキュメント⁠。

RStudioのカスタマイズ

RStudioよって得られるコーディング効率の向上は、コマンドパレットやアドインといった必要に応じて利用する機能だけにとどまりません。RStudioの設定にこだわれば、常に効率化の恩恵を享受できます。

本稿では筆者(Atusy)が特に重要だと考えるペインレイアウトとコードの診断について紹介します。

ペインレイアウトの変更

RStudioの画面は4つのペインで田の字に分割されています。デフォルトでもそれなりに使えますが、目線のバランスやコードの実行結果の閲覧性といった観点から、筆者が採用しているレイアウトを紹介します図6⁠。

図6 ペインレイアウトの例。後述の「Show Document in New Window」機能を使い、複数のソースコードを同時に閲覧している
図6

設定の変更にはコマンドパレットから「Pane Layout Options…」を開いてください。筆者の場合は、左上が「Console⁠⁠、左下が「Files, Plots, …⁠⁠、右上が「Source⁠⁠、右下が「Environment, History, …」といった配置です図7⁠。

図7 ペインレイアウトの設定画面(筆者の設定)
図7

このレイアウトはSourceペインを基準に考えています。複数のペインから構成されるRStudioはウィンドウサイズが小さいと不便なので、全画面で使用する時間が長くなります。デフォルトのままでSourceペインを左側に配置していると、文字の開始位置もディスプレイの左側に位置し、必然的に目線が左に集中します。そこでSourceペインを右側に配置すると、文字の開始位置を調整できます。たとえばソースコードの編集に集中するときは、目線を自然にディスプレイの中央に戻すことができるように、左端の区切りを左にずらします。

ソースコードがRファイルで、実行結果の表示領域を大きくしたいときは、Sourceペインの左端の区切りを右にずらします。すると左上のConsoleペインや左下のPlotsペインの幅が大きくなります。また、左下にはHelpペインもあるので、ヘルプを参照しながら右側でソースコードを書くといった使い方もできます。

右下のペインはEnvironment(変数一覧)やHisotry(コマンド履歴)などをタブで切り替えられるようになっています。筆者の場合、これらをほとんど使わないので、Sourceペインを最大化して右下のペインは最小化しています。

複数のファイルを並べて編集することもできます。コマンドパレットから「Show Document in New Window」を実行すると、現在開いているファイルを新しいウィンドウで開きます図8⁠。ウィンドウの数に制限はありませんので、必要に応じて調整してください。ウィンドウを整列させると、使い勝手がさらによくなることでしょう。整列させる方法はWindowsであれば標準でWindows をスナップする機能があります。macOSであればTilesアプリが便利です。

図8 複数ファイルを並べて編集する様子。右側のblock.Rファイルを編集している部分は独立したウィンドウになっている
図8

RStudioの機能に複数のファイルを並べる「Add Column」という設定がありますが、筆者は不便に感じるので使っていません。この機能はSourceペインを画面の左側にしか追加できず、閉じるには設定をオフにする必要があります。

コードの診断

RStudioには、編集中のコードを診断して、バグにつながりうる箇所を随時指摘する機能があります。デフォルトで有効化されている設定もありますが、以下を有効化することをおすすめします。深刻度に応じて警告なら「!」マーク、エラーなら「×」マークがコードの左側に表示されます。

  • Check arguments to R function calls
    • 関数呼び出しに対して、引数の不足や引数名の間違いを指摘
  • Check usage of ⁠<-⁠⁠ in function call
    • 関数の引数の指定と同時に変数定義をしていれば警告(例:print(data <- mtcars[, 1:5])
  • Warn if variable used has no definition in scope
    • 変数定義が参照可能な範囲になければ警告
  • Warn if variable is defined but not used
    • 定義したが未使用な変数があれば警告
  • Provide R style diagnostic (e.g., whitespace)
    • コーディングスタイルを確認
    • (例えばif(TRUE){print(1)}のように、if文の条件式を囲う括弧の前後に半角スペースがなければ指摘。)

指摘事項はしばしばバグの温床になるので、真摯に対応しましょう。コードを実行するたびに直すよりもずっと効率的です。

まとめ

RStudioは豊富な機能を備えた統合開発環境です。本稿ではアドインやRStudioの設定を通じて、コーディングにおける利便性を追求する方法を紹介しました。前編で紹介したコマンドパレットは、本稿でも活躍した便利な機能です。未読の方はぜひご参照ください。

本連載はRユーザの作業を効率化してくれる外部ツールを紹介していきます。R言語とさまざまなパッケージを駆使して分析効率の向上を主眼においた書籍には、本連載の執筆陣が手掛けたRが生産性を高めるがあります。RStudioの入力補完やキーボードショートカット、アウトライン、R MarkdownのVisual Editorなどを紹介しています。分析効率とコーディング効率のどちらにも興味のある方は、手にとってみてください。

おすすめ記事

記事・ニュース一覧