cucumber flesh

Rを中心としたデータ分析・統計解析らへんの話題をしていくだけ

💮StackoverflowやGitHubに書かれているコードを手元で検証する

最近、ggplot2逆引きプロジェクトが熱い。これは、プログラミン関係のお悩み相談所として有名なStackoverflowに寄せられるRの作図パッケージ{ggplot2}に関する質問を翻訳して整理しようという企画。

それをきっかけに、Stackoverflowを定期的に覗くようになったのだけど、ここに書かれているコード、試したことがない。なんでかというと、コピペが面倒だから

で、お気軽にコードが検証できるようになればR力が高まるのでは?と思いついてStackoverflowや各種プログラマー御用達サイトに挙げられているコードを実行できるような関数を書いた。書きなぐりな感じが満載なのでコードの汚さとかはご勘弁。Stackoverflow以外にも、GitHubとQiitaに挙げられているコードなら動く。

こんな風に使う。ソースコードはGistに置いてある。関数を動作させるために{xml2}{rvest}を利用する。

# Gistにあるソースコードを読み込む
devtools::source_gist("https://gist.github.com/uribo/77ed332692bea5d821f2")

関数をまとめるか分けるか迷ったけど、とりあえずサイトごとに関数を分けた。基本はretest_*という形をとる。引数に、実行したいコードがあるurlと、そのページにある何番目のコードを実行するかを指定する引数(rank)がある。

# このページにある解答例を検証
url <- "http://stackoverflow.com/questions/21682089/how-to-use-expression-in-in-names-arg-function"
retest_so(url, rank = 2)
## 
## > set.seed(1)
## 
## > x <- matrix(rbeta(8, 5, 5), 2, 4)
## 
## > barplot(x, names.arg = expression(C[12] - C[16], C[17] - 
## +     C[25], C[26] - C[32], C[33] - C[37]))

当たり前だけど、作図もしてくれる。

GitHub版。issuesのurlを渡す。Rだったり、Rでないmarkupであったりするので、別途lang引数で指定できる(初期値はR)。

url <- "https://github.com/hadley/dplyr/issues/587"
retest_gh(url, 2, lang = "plain")
## 
## > df <- data.frame(x = 1:4)
## 
## > `[.data.frame`(df, 1)
##   x
## 1 1
## 2 2
## 3 3
## 4 4
## 
## > `[.data.frame`(df, 1, )
## [1] 1

さいご、Qiita版。

# このページの最初に書かれているコードを検証する
url <- "http://qiita.com/uri/items/98b20d928a9d8c0645d2"
retest_qt(url, rank = 1)
## 
## > library(docxtractr)

Gistを見てもらえばわかると思うが、一時ファイルを作成して、それにRコードとして保存し、sourceで読み込む、という風な流れ。コード実行後、一時ファイルは削除される。

まだまだ手を入れるところは多いけどひと通り動いて満足。

Enjoy!