Rprojectを立てるのがめんどくさくて勝手にプロジェクト立てるパッケージ作った話
始めてRのパッケージをつくった
RStudioを使い慣れている人は「案件や研究テーマ別にプロジェクトを立てる」ということはもはや呼吸と同義だと思いますし、
kaggleをはじめ、機械学習や統計モデルの構築プロジェクトを繰り返している経験がある人は、
プロジェクトのフォルダ構成を整理しておくのは呼吸と同義だと思います。
一方で「R初心者です」「これからデータ分析でやっていく」という人たちにとって、
上記は結構ハードルの高いお話なのかなと勝手に思っています。
きぬいと自身も、Rのプロジェクト作成による最低限のフォルダ構成から、
オリジナルのフォルダ構成を作るのはいちいち手間でした。
「じゃあもうそれ用に作っちゃうか」って思ったので作りました。
ついでにパッケージ開発とかを勉強しました。
インストール
ソースはこちら。 github.com
devtools::install_github()
でインストール可能です。
devtools::install_github("8-u8/R_packages/pipelineR")
なんかWindowsや、Rやパッケージのバージョンによっては以下のWarningが出るかもしれません。
These packages have more recent versions available. It is recommended to update all of them. Which would you like to update? 1: All 2: CRAN packages only 3: None 4: backports (1.1.x -> 1.1.8) [CRAN]
きぬいとの環境(win10/R 3.6.2)では、3でも大丈夫でした。
4はRのバージョンが4.0.0以上でないとインストールに失敗するようです。
このあたりは謎なので、そのうち修正を進めます。
基本的な思想
思想の根本は「Rプロジェクトの手続きの自動化と、プロジェクトのフォーマット化」にあります。
データ分析においてこのフォルダを作成することは重要ではありますが、工数としては最低限に抑えたいです。
また、人やプロジェクトによってフォルダの構造が大きく変わってしまうと、
分析の再現性や分析フレームの転用コストが大きくあがってしまいます。
そこを回避したいお気持ちがこの結果です。
関数dir_create
いくつか関数を作っているのですが、現状まともに機能するのはdir_create
関数です
この関数は「カレントディレクトリ上にRプロジェクトを作成し、さらに簡単なフォルダ構成を生成する」関数となっています。
Windowsであればドキュメント、Linuxであればhome上に勝手にできます。
もしも任意のディレクトリ上に欲しい場合は、 setwd()
で移動してから以下を実行してください。
*1
> pipelineR::dir_create() ✓ Creating './R_project_2020-08-17/' ✓ Setting active project to '{your current directory}/R_project_yyyy-mm-dd' ✓ Creating 'R/' ✓ Writing 'R_project_yyyy-mm-dd.Rproj' ✓ Adding '.Rproj.user' to '.gitignore' ✓ Setting active project to '<no active project>' [1] "R project file was successfully created at{your current directory}" [1] "folder created. start project?" 1: Yes 2: No
1を入力すると新しくRStudio Sessionが開かれ、生成したプロジェクト上で作業が可能です。 2を入力するとプロジェクトを作成するだけになります。
これだけで基本的なファイル管理などが完了しています。
フォルダ構成
{your current directory}/R_project_yyyy-mm-dd以下のフォルダと格納を想定するファイルは以下になります。
- 01_input: 分析元データ
- 02_middle: 前処理済みのテーブルなど
- 03_output: 最終的な分析結果
- 04_source: 用いているソースコード
- 99_sandbox: EDAなど
- R: renvなどのパッケージ?
- R_project_yyyy-mm-dd.Rproj: プロジェクトファイル
これから
ヘルプとか、どきゅめんととか、作ります。
加えて、テストを書いてみたりいろいろとアレなのですが、パッケージ開発という試み自体が初めてで、
試行錯誤しながらやっていく予定ですので、応援してください。
あと、モデルの自動化や、結果の保存とかを作りに行けるといいなあと思いました。
最後に
参照した資料とかは以下です。
- heavywatalさんのdevtoolsパッケージの解説
- R extentionsのドキュメント
- atusyさんのroxygenまとめ
- roxygen2のissueとか
- r-wakalangでのやりとり(atusyさんに手取り足取り)
*1:このあたりも自動化できたらいいなあって気持ちが強くありますが、スマートな実装が思いつかないので悲しいです