Jun 15, 2022
25 mins read
Rで解析や作図したものを別ファイルとして保存しておき、LaTeXやwordを用いて文章を作成し、共著者とのメールなどをしながらgoogle driveやdropboxでバージョン管理をして…という流れがなんだか非効率的に思えていました。
どうにか一元管理できないかと探していたところ、Rstudio + gitで全て完結しそうだなと思い実際に手を動かしてみた記録です。 簡単に説明すると Rstudioでrticlesなどの便利packageを用いてRmarkdownを書き、それをgitで管理する という方法になります。
この記事の対象はRを用いて作図 -> 論文執筆をしてきた(これからする)くらいの方です。僕の知る進化・生態学系の研究者の方はRを使う機会が多いと思うので、そちら向けと言ってもいいかもしれません。
Rユーザーにとっては言わずもがなであるIDE。普段使いしている方も多いと思います。
色々なnvimのプラグインを試した結果、Rmarkdownを書くのにはRstudioが一番適していたので論文執筆時にはお世話になっています。(普段の解析はnvimでやっている。)
Rでドキュメント生成するため、Rとmarkdownを組み合わせたもの。少しややこしいheader部分を除けばRのソースコードとmarkdown記法で全て書けるので非常に楽。 markdownのcheat sheatはここを参照。
主に文章、Rスクリプトがまとまっていることに由来する様々なメリットがあります。
反対にデメリットもちらほら
Rのpackageの一つ。Rmarkdownで文章を執筆する時に、さまざまなジャーナルのテンプレートを使用できる。どんなテンプレートがあるかなどについてはrticles#templatesを参照してください。
分散型のバージョン管理システム。有名なプラットフォームはgithub。他にもBitbucketやgitlabなど色々ある。いずれも基本的な使い方は変わらない(と思う)ので、以下ではgithubを用いた運用例を載せています。
個人的には(もし一人で研究を進めるとしても)研究用のディレクトリをgitで管理することはメリットが大きいと思っています。
デメリットもいくつかあって
特にデメリットの2.はビデオデータや高画質の画像データなどを扱う場合には顕著に厳しくなると思います。また、デメリットの3.は結構あるかもしれません。(使えた方が楽なツールと割り切って勉強してもらってください)
論文執筆用のディレクトリを作成し、gitに紐つけます。もしくはgithubなどで作成したリポジトリをcloneします。gitを使ったことある方は飛ばしてもらっても良い部分になります。
また、以下のスクリプトはRstudioのConsole PaneのTerminalタブから実行することが多いです。コマンドを書く際にはどこに記述するものか明記するようにするので参考にしてください。
githubの右上の+ボタン > New repositoryをクリックします。
細々した設定を記入します。 実際の作業に倣い、ここではPrivateを選択しておきます。 Licenseは今回はMITを選びました。
諸々の設定が終わったら一番下のCreate repositoryをクリックしリポジトリを作成します。
こんな感じでリポジトリが作られました。
右上の緑色のCodeと言われるボタンをクリックすると以下の画像のようにhttpsの情報などが得られます。
その情報をコピーして、git cloneで引っ張ってきます。
## Terminal
cd article #作成したい場所まで移動する
git clone https://github.com/6W3N/demo.git #それぞれのhttps情報に差し替えて使ってください。
githubのアカウント名やtokenなどを聞かれるのでそれをタイプするとプルできます。
## Terminal
cd demo #今回はdemo repositoryをpullしたのでdemoに移動する
ls #中身を見る
ここまでで使用するディレクトリの作成は終了です。
まずはrticlesパッケージをインストールします。
## Console
install.packages("rticles")
これで準備は終了です。 早速Rmdのテンプレートを使いに行きます。
今回はサンプルとしてarXivのテンプレートを用います。各自の投稿したいジャーナルのフォーマットに合わせて適宜修正してください。出版社に合わせたテンプレートもあるのでそちらを使っても良いかもしれません。
Rstudio > File > New File > R Markdown > From Template > arXiv Preprint の順に選択していきます。 From Templateにない場合は、Rstudioの再起動などを試してみてください。
今回、Nameはarxivにしましたが、ここも適宜変更してください。 また、Locationでarxivディレクトリを作成するパスの指定をします。 先ほどプルしてきたdemoの直下に入れます。
すると下記の画像のようにarxivというサブディレクトリが作成されていることが確認できます。
arxiv/arxiv.Rmdを選択すると以下のようなファイルが開きます。
これが論文の雛形になります。 yaml header部分は特に用事がなければ様式を変更しないことをおすすめします。この辺りは沼が深く、筆者もまだまだな分野です。。。
適当に編集しましょう。
yaml headerでのいくつかを簡単に説明します。
編集が終わったら、Rstudioのknitボタンをクリックするとよしなにコンパイルしてくれます。
文章は文ごとに改行して管理することをおすすめします。1行だけの改行であればコンパイル時にパラグラフとして分かれません。この辺りはどんどんコンパイルしつつ探してみてください。
ある程度書き進めたらgitを用いてgithubにもpushしておきましょう。
基本的には以下のコマンドでpushまで行います。
cd ../ #demoに入ります
git add arxiv #書き進めた文章などを追加します。
git commit -m "add arxiv dir" #何を追加したのかについて記述します
git push
すると以下の図のように追加されてアップロードされます。
すると以下の様にgithub上にも反映されます。 arxivディレクトリが追加されていることがわかります。
一人でやる場合にはここまでであらかた終わりです。
ここからは共同編集のやり方についてです。 二人以上で作業するときはbranchと呼ばれるgitの機能を使うと効率良く作業できます。
筆者もそれほど精通している訳ではなく、現状こうしている、と言う例を載せています。
Repository > Settings > Collaborators > Add peopleの順にクリックします。
ここで、共著者のgithubアカウントを探します。
以降は共著者の画面を作るのが面倒だったので文字で説明します。すみません。誰か手伝ってください。。。
まず初めに共著者には自分が作成したレポジトリをpullしてもらいます。
git clone https://github.com/6W3N/demo.git
その後、最初にbranchをきってもらい、そのbranch上で作業してもらいます。
git branch coauthor1comment #なんでもいいです
git checkout coauthor1comment
その後作業(Rmarkdownにコメント; 改変)をしてもらいます。 作業の際にはmarkdown記法を使いこなせるといい感じになります。
Rmarkdownへの作業完了後、以下のコマンドで新たなbranchとしてpushします。
git add arxiv/arxiv.Rmd
git commit -m "add comment"
git push origin coauthor1comment
ここまででgithubに反映されます。
github上でpull requestを投げます。(ここは別にメールでもいいと思います。)
まずはリモートのbranchをローカルに落とします。
git fetch #リモートのおbranch情報を引っ張ってきます
git branch -a #リモートのbranchがあるか確認します
git checkout coauthor1comment #もしあればそのbranchに移動します
git branch #これでcoauthor1commentが出てくればokです
その後、mainにmergeします。
git checkout main #既に入っていたらAlready on 'main'と表示されます
git merge coauthor1comment
gitではmergeは行単位で行うので、共著者が編集してくれた部分だけがmergeによって更新されます。
共著者のコメントなどを参考に修正を進めます。
修正を終えたらpushして… という感じでどんどん進めることができます。
ここまで、ひとまず自分がやっているところを紹介してみました。 Rmarkdownの使い心地はかなりよく、wordでちまちま修正するよりも良さそうだな〜と思い最近は専らこのシステムで書いています。
そのうち英文校閲に投げる時のpandocの利用などを書こう…。
Enjoy!
Sharing is caring!