💮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!