LoginSignup
6
3

More than 3 years have passed since last update.

RファイルをR Markdown形式のファイルに変換するパッケージ(RconVerteR)を作ってみた

Last updated at Posted at 2019-06-24

目次

はじめに

最近, R Markdownの利用が広がっているようですね. 私の周りでも, 他人にRのコードを渡す代わりに, R Markdownを書いて, HTML形式でコードの内容を共有する人が増えてきた気がします.
(R Markdownに関しては以下の関連記事にあげるページがわかりやすくまとまっているのでオススメです. )

R Markdownは通常RStudio内で書いてゆくと思うのですが, Rコードをメインで書きつつMarkdownも交えて書いてゆくというのに慣れない, という人もいると思います(私です).

そんな折, @hgoj さんから, Rコードから直接R Markdown形式に変換する方法を知らないか, と相談を受けました. しかし, 私の調べる限りでは特に見つけられませんでした.

ただこの変換は, いわゆる正規表現をうまく使ってゆけばなんとかできそうでした. そこで, いろいろなファイルを読み込むのに便利なreadrパッケージと, 正規表現を扱うのに便利なstringrパッケージを利用して, RconVerteRというパッケージを新たに作ってみました!

関連記事

コード全体

とりあえずコード全体について載せておきます.
この後, 詳細について少しずつ見てゆきます.

コード全体.R
### Install RconVeretR package via devtools
if (!requireNamespace("devtools", quietly = TRUE)){
    install.packages("devtools")
}     ### install devtools

devtools::install_github("KosukeHamazaki/RconVerteR")  ### install RconVerteR


### How to use RconVeretR package
require(RconVerteR)

R2Rmd(fileName = "変換したいRファイルのパス")  ### R --> R Markdown

Rmd2R(fileName = "変換したいR Markdownファイルのパス")  ### R Markdown --> R

RconVerteRパッケージのインストール

まず, パッケージのインストール方法に関してご紹介します.
このパッケージは, GitHubにて公開しているので, 開発者向けのパッケージdevtoolsを介してインストールできます.
仮にdevtoolsをインストールしていない場合は以下のコードでインストールしましょう.

### Install RconVeretR package via devtools
if (!requireNamespace("devtools", quietly = TRUE)){
    install.packages("devtools")
}

その後以下のコードでRconVerteRパッケージをインストールしましょう.

devtools::install_github("KosukeHamazaki/RconVerteR")
require(RconVerteR)

特殊なパッケージやRcppパッケージなどは使っていないので, 特にエラーなくすんなりインストールできるはずです…

さて, RconVerteRパッケージをインストールすればわかると思いますが, このパッケージにはR2RmdRmd2Rという2つの関数のみから構成されています.

以下ではそれぞれの関数の簡単な使い方に関して説明します.

R2Rmd関数の使い方

R2Rmd関数は, その名の通り.Rファイルを.Rmdファイルに変換する関数です.
以下の1行のコードを実行すれば良いだけです.

R2Rmd(fileName = "変換したいRファイルのパス")  ### R --> R Markdown

一番簡単にはこれで終わりで, 元のRファイルと同じ場所に同じファイル名で拡張子が.Rmdのファイルが作成されるはずです. あとは普通のR Markdownファイルと同様にKnitを行えば, HTML形式のファイルができると思います.

出力する.Rmdファイルの名前を変更したい場合は, saveFileNameという引数に保存したいファイル名を指定してみてください.

ちなみに他にもいくつか引数を用意してあります. 例えば,
textTitle
Author
Date

は, R Markdownにおいてタイトルなどの設定を行う為の引数です.

plotEcho引数は, plotを描く時にその分のコードを表示させるか決めるもので, plotEcho = TRUEならコードを表示します.

outFormat引数が一番わかりにくいと思うのですが, これは小見出しを作る時に#の数をどうするか, という設定に関わる引数です.
デフォルト(outFormat = "unknown")では, 小見出しの#の数はいつも3つで固定になります.
outFormat = 1にすると, 以下のような少し複雑な設定で小見出しの#の数を決定します. (私がRでいつもつけている小見出しに準拠しているものなので, 無視してもらって構いません)

例えば.Rファイル内で各行の#の数が以下のようになっている時,

変換前.R
####### R ファイル内の小見出しの付け方
###### R ファイル内でこんな風に
##### 小見出しをつけていると
#### Rmd ファイル内では
### こんな風に変換されます. 
## 各行の"#"の数がどう変化するかに
# 着目してみてください. 

.Rmdファイルではこのように変化します.

変換後.Rmd
# R ファイル内の小見出しの付け方
## R ファイル内でこんな風に
### 小見出しをつけていると
#### Rmd ファイル内では
##### こんな風に変換されます. 
各行の"#"の数がどう変化するかに
着目してみてください. 

こんな感じに.Rファイルを決まった形跡で書いていれば, Rmd形式に変換した時に自動で小見出しを設定してくれるので便利かもしれません.

Rmd2R関数の使い方

次にRmd2R関数について紹介します.
Rmd2R関数は, R2Rmdとは逆に, .Rmdファイルを.Rファイルに変換する関数です.

ちなみに, knitrというパッケージにpurlという.RmdからRコードのみを抜き取るという関数が実装されており, Rmd2R関数はこれと似た関数と言えるかもしれません.
ただ, Rmd2R関数では小見出しなどを残すことができる点が違います.

さて, 実行の仕方はR2Rmd関数と同様単純で

Rmd2R(fileName = "変換したいR Markdownファイルのパス")  ### R Markdown --> R

で基本的にはOKです.

引数としては, outFormat, textTitle, saveFileNameR2Rmd関数と同様です.

他の引数としては, remainExplanationはR Markdown内の説明文を, Rファイル内に残すかどうかを決める引数です. なお小見出しは必ず残ります.

それから, Numberingという引数は以下のように小見出しに1., 1.1.のような番号を追加するか決定する引数です.
番号の追加の仕方はR Markdownファイルにおける#の数から決定されており, 以下の例のような感じです.

例えば.Rmdファイル内で以下のような小見出しのつけ方をしている場合,

変換前2.Rmd
# R Markdown ファイル内の小見出しの付け方
## R Markdown ファイル内でこんな風に
### 小見出しをつけている場合
### R ファイル内で
#### どう番号がつけられてゆくか

## "#"の数に応じて
### 変化していくのが
#### わかるでしょうか. 
##### 少し複雑ですが
#### わかってもらえると

# 幸いです. 

.Rファイル内では以下のように番号がつけられます. (outFormat = "unknown"の場合)

変換後2.R
### 1. R Markdown ファイル内の小見出しの付け方
### 1.1. R Markdown ファイル内でこんな風に
### 1.1.1. 小見出しをつけている場合
### 1.1.2. R ファイル内で
### 1.1.2.1 どう番号がつけられてゆくか

### 1.2. "#"の数に応じて
### 1.2.1 変化していくのが
### 1.2.1.1. わかるでしょうか. 
### 1.2.1.1.1. 少し複雑ですが
### 1.2.1.2. わかってもらえると

### 2. 幸いです. 

自動で番号付けを行いたい場合は是非活用してみてください.

おわりに

いかがだったでしょうか. ここまでRファイルをRmdファイルに変換するRconVerteRパッケージのインストールと簡単な使い方に関して紹介してきました.
もしかしたらこれまでも似たような関数とかあるのかもしれませんが, とりあえず私はこのパッケージを使ってゆこうと思います. (似たような関数があるならコメント欄などで教えていただけると幸いです. )

当然, 今回の関数を使った変換は完全に思った通りになるとは限らないので, その辺りは変換後に適宜修正していただければと思います.

ちなみに個人的には, .Rmdファイルより.Rファイルで実行をしたかったりすることが多いので, Rmd2R関数の方が重宝しそうです笑

最後に, RconVerteRパッケージの管理などは私が行なっているので, 使用にあたって不明な点や, 修正してほしい点, 追加してほしい機能などあれば, コメント欄で言っていただければ, できる限り答えてゆきたいと思います.

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3