niszetの日記

細かい情報を載せていくブログ

(R) とりあえずコードを書き始めるところからはじめてRmdにまとめるまでの流れ…(メモ)

皆さんどうやってるのかしら…

ここ1-2週間でRを本業の方で使うようになって、ggplot2のパッケージをはじめ、R言語の細かいところまで色々と見れるようになってきました1。やはり業務で使えるとなると、圧倒的にかけらえる時間が違うし、直近の目的があるのでどうやってでも完成させるというモチベーションの違いがもろに出てきますね2

さて、今のところデータを可視化してドキュメント化するところに力を割いています3。 が、いきなりドキュメントに載せるレベルの図が作れるわけでもないし、ましてや関数の挙動を完全には把握できていないniszetさんは、はじめに簡単なコードを書いて挙動を確認しながら少しずつ大きくしていく方法で書いています。もうちょっと理解が深くなればサクサクかけるのかもしれませんが…。まぁそれでも最初は小さく作るのが基本だと思うのです。

コンソールで対話的に処理したRのコマンド、コード片からでもR/RStudio IDEを使えば簡単にRのソースファイルにまとめられたりするので非常に便利だなぁ…と思って使っています。4。 また、gitとの連携も非常に楽、というかコマンド打たなくてもどんどんcommit出来るし差分は見やすいし、もうこれなしでは開発できない…という気持ちです5。 さて、そんなniszetさんですが、書き捨てスクリプトは今まで掃いて捨てるほど書いています6が、長文や長期にわたって使用するようなガチなコードは書いたことがございません。あしからず7。 ざっくり書けば、こんな感じの手順でやっています。

  1. コンソールで使う関数の動きを試す。小さなデータなどを使って挙動を確認しながら必要な処理を順に実行して結果が得られることを確認。
  2. Historyから必要なコードをRファイル中にコピーして順序や変数名などを整理してまとめる
  3. Rファイルだけで通して実行できるか確認(sourceでも一行ずつ実行でも良い)
  4. Rを再起動させて実行できるか確認(environment中の変数は消さない)。足りないライブラリがあればlibrary()でコードの先頭に足す。
  5. Globalenv中の変数を.RDataに保存したあとに環境中の変数をすべて削除してRを再起動。
  6. 再び通して実行できるか確認。足りない変数があれば保存した.RDataとHistoryからどうやってつくるのか確認、不足しているコードを追記する。
  7. これを単体のコードで完結して実行できるまで対応する。
  8. gitで一旦commitする
  9. stylerでコードを整形する
  10. git diffで差分を確認、問題なければcommit
  11. 共有している場合は、GitBucketなどにpush8

4はあまりやらないけどたまに存在しない関数があったりしてビビる。Historyに残らないような設定だと泣きそうになるな…(これは最初からRファイル中で書けば良いのだが)

9のstylerをかませるのはとても楽にコード整形出来て良いです。encのバージョンが上がってないと日本語含む行は消えるけど。(そのためにgit commitを実行前に入れている)

もうちょっとスキルが向上すると、このやり方も変わってくると思うのだけど、現状の記録として残しておく。

すでにコードの量が爆発してきて、管理方法を考えないとやばい状況になっているのですが…。素直にパッケージ化を目指すべきだな…。

コードは全部Rファイル中に書いてある

Rmd中に書いていなかったりします。ただ、これは関数定義部分だけRファイルに追い出して、呼び出す・データを与える、まわりはRmdのchunk内の方が良い気が(管理しなくてはいけないコードが増えるので)

Rmdのchunkの中にRのソースコード中のコードを埋め込む方法は下記のteramonagiさんの資料で知りました。逆にRmd中のchunkをRファイルから使うことも出来るらしいですが、関数定義はRファイル、呼び出しはRmdに含めておいて、必要になったら互いに呼び合うようにするのかな…

d.hatena.ne.jp

RPubs - Tokyo.R@36

www.slideshare.net

d.hatena.ne.jp

そんなかんじで

日々、修正してはcommit、移動させてはcommitしているためかあまり進みが良くない気がします…。
が、上記の手順で勢いで書いたコピペだらけのコードを少しずつ整理する過程ではgitは必須ですね…

RStudio IDE上でgit使いたい人はこれを読んでおけば間違いないので、是非ッ。

qiita.com

もう少しなれたことにこれを見返すことによって成長を実感できるというスタイルの日記…。

もう少しノウハウ貯めていきたい…。

Enjoy!!


  1. 単に業務で使う上では細かいところを把握していないと詰むっていう話である。

  2. あ、いや、いつもちゃんとモチベーションありますよ…?ありますけど…短時間にガーッててやるわけじゃないですからね…

  3. テキストファイルをcsvに変換して…のところからRで書いているが、これ自体は単なるテキスト処理…。

  4. 履歴も残るし、履歴からソースあるいはコンソールに書き写すことが簡単にできるし…

  5. 幸か不幸か、まだgitがないとどうしようもない状態になってしまった…という経験はないのですが、常に履歴を残しているというのは感覚的に非常に気が楽になりますね…。

  6. 主にlispっぽい言語とtclっぽい言語で

  7. なにがだ・・・

  8. まぁ社外には出せないので、あとはgitlabとかですかね。