RStudio Advent Calendar 2012 (R Advent Calendar 2012)

R Advent Calendar 2012、5日目です。

 みなさん、アドベントカレンダーの実物ってご覧になったことありますか?
僕がみたことのあるそれは、クリスマスツリーのイラストが書かれた紙箱に、25個の扉がミシン目で開くような加工がされてて、それぞれの扉をぺりぺりって開くと、中に手のひらに収まってしまうくらいの小さなおもちゃが入っている、といったものでした。

そうです。ちょっとした小ネタでいいんです。なにも文芸的プログラミングについて紹介したいからって昔の文豪のパロディ風な記事を上げたりする必要はないんです。

ところで、僕はアドベントカレンダーについてひとつ疑問があるわけです。好奇心の核弾頭のような年頃の子供が、「一日にあけていい扉は一つだけだよ」って言って、はいそうですかと黙っていうことを聞けるわけがない。

他の扉から一体どんなおもちゃが出てくるのか、当然気になり知りたくてたまらないお年頃なはずなんです。1日め2日めくらいはおとなしく我慢できていても、5日めくらいには残り全部開けたくなっちゃうのがもうこれは人情というか、本能ですよね。

さて、そんなこんなでわれらがR Advent Calendar は昨年も行われ,大盛況でした。でもRStudio Advent Calenderは行われなかった...RStudioがかわいそうです! Rと違ってググりやすいのに! 

というわけで、クリスマスまでのアドベント期間,分刻みで RStudio に関する記事を公開していきます! クリスマスまでまだ20日も前のとある一日で RStudio に関する新しい記事をいろいろ書いてやろうというイベントです!

というわけでRStudio Advent Calendar 2012、スタートです。

1分目 「RStudioをVimキーバインドで使う」


Tools→Options→Code Editingからチェックボックスをオンにすると、Vimキーバインドのめくるめく世界が...!

Editモードを抜けるときはVim同様、Escを使います。

「...Vimってなんですか?」 っていう人はVim Advent Calendar 2012 : ATNDを見てみよう!
まちがっても小指を多用するお兄さんの方についていっちゃ駄目だぞ!

2分目 「RStudioをダウンロードする」


この記事を読んでる奇特なあなたがまさかRStudioをダウンロードしていないなんて考えるべくもありませんが、もしかしたら、万が一、そういえば最新版をダウンロードしてなかったな...なんてことがあるかもしれません。
そんなあなたのために、URLを貼っておきます!

Vim編集モードは今年2012年の11月にリリースされたver0.97からついたものですし,アップデートによって新しい便利な機能が付け加えられることが多いので、常に最新版にしておくことをおすすめします。

Open source and enterprise-ready professional software for data science - RStudio

daily buildはここから落とせるっぽいですよ!
Index of /download/daily/desktop

なお、RStudioだけじゃなくて、ちゃんとPCにR本体もはいってることを確認して下さい☆(ゝω・)v

3分目 「RStudioの4分割画面を理解する」


RStudioのかわいいところは、コードを書く部分、実行される部分、プロット画面、ディレクトリのファイル一覧などが全部みえるところです。
他のプログラミング言語と違って、Rを使う理由は圧倒的に「プロットしたいから」が多い。
だったら、コンソール(コード実行画面)だけじゃなくて、プロット画面もすぐ隣についてたほうが便利ですよね?

また、他のプログラミング言語と違って、Rが好まれる理由に「プログラミング言語の中ではとっつきやすそう」というイメージがあります。....ありますよね?

フォルダ内のファイル一覧が見れたり、history() って打たなくてもHistoryタブをクリックすれば履歴が見れたりするGUIのRStudioは、Rへのハードルをかなり下げてくれている気がいたします。

4分目 「過去を振り返ってみる」

さあ、RStudio Advent Calenderも4分目、だんだん盛り上がってまいりました。
ここらで少し落ち着いて、先人たちがRStudioについて何か書いてないか見返してみましょうか....

そろそろRStudioの話 (2012/8/4)

Rで学ぶデータ・プログラミング入門 ―RStudioを活用する―

Rで学ぶデータ・プログラミング入門 ―RStudioを活用する―

この本はdichikaさんも1日目で紹介されてます。

5分目 「RStudioのよくつかうショートカット」

Ctrl-1でエディタ画面にカーソルを移動
Ctrl-2でコンソール画面にカーソルを移動

エディタ画面でよくつかうショートカット

F1でカーソル位置のオブジェクトのヘルプ表示
F2でカーソル位置の関数定義表示

6分目 「RStudioで簡単パッケージ作成(できそう)」

RStudioは統合開発環境なので、プロジェクト単位でファイルを管理する機能がついてます。


このCreate Project するときにType: Packageを選択してみましょう。
すると、Buildという見慣れないタブが出てくるようになります。

ファイル一覧画面には、パッケージ作成に必要なファイル一覧ができています!

後は画面上の方のBuild&Reloadってボタンを押せばコンパイルが行われ、
MoreボタンからBuild Source/Binary Packageを選択すればパッケージが配布可能な形になります。

本家サイトの関連ページはこちら。
Developing Packages with RStudio

えっと

とここまで書いてきて気づいたら次の日になってしまったのでおとなしくバトンを渡します....!

だれかもっとRStudioの細かすぎて伝わらない便利な機能を紹介してください...!

修論提出したらやりたいこと

「俺、この戦争が終わったら、○○するんだ......」リストの何番目かに載ってる懸案。思う様甘い物を食べに行きたいとか日本酒飲みに行きたいとか書店巡りしたいとか温泉浸かりたいとか自転車のタイヤに空気入れたいとか髪切りたいとかいろいろあるけども、それらはひとまず措いておく。

英語論文執筆用のコーパスを整備したい

わたしは英語ネイティブではないので、英語を書くときは基本「英借文」をすることになります。コーパスが云々というのは、要するにその英借文用のデータベースを作って、英借文のプロセスをシステム化しましょうという試み。(理解が間違ってたらすみません)

え、修論執筆前にやっておけよ、という感じですが、そこまで頭と手が回らなかった...

別の言い方をすると、Incremental PubMed Expression Search: inMeXesPubMedアブストラクトを対象としている英単語の用例検索)を自分用にカスタマイズしたものを整備したい、というイメージ。

何を使うか→CasualConcとかどうか

MacOSXでのコーパス作成の強い味方。に思える。
CasualConc

どうやって使えばいいかというと、論文PDFをテキストファイル化したものをCasualConcに食わせてあげればOK。

こんな感じで。

目的語の文脈中の頻度などの分析、keyword in contextという分野らしい。
今月か来月に参加する予定の温泉開発合宿であれこれ試してみたくなってきた。
まずは提出...そして発表...

PDFのテキスト化はどうするのっと

Xpdfに同梱されているpdftotextを使いましょう。

ただし、macportsで入るXpdfにはpdftotext入らなくなったらしい。
なので以下からバイナリでインストール。そうすると使える
Download Xpdf and XpdfReader

pdftotext hoge.pdf

のように打つとhoge.txtを生成してくれる。

pdftotext -enc UTF-8 hoge.pdf

のようにファイルエンコーディングを指定してあげたほうがいいかもしれない。

つくばRのかくも長き不在、またはなぜつくばRは13ヶ月の時を経て再び開催されるに至ったかそしてありがとうさようなら2011年

そろそろid:myopommeさんのSweaveエントリ群への返答記事を書きたいし、今日は大晦日なので一年を振り返るエントリも書こうと思ったのだけれど、その前に書いておくべき事があったことを思い出したので。

ぼくたちとつくばRの419日戦争

去る2011年11月12日、フリーな統計解析・可視化環境であるRをテーマに、つくば周辺(半径40万キロくらい)をターゲットとした勉強会であるところのTsukuba.R #9が開催された。参加者17人、うちスピーカーが8名と、東京開催にしては小規模だがid:a_bickyさん@gentlementatsu君id:gepuro君が初発表してくれるなど、密度の濃い回であった。
宣伝してくれた方、Ustや会場で参加・発表してくれた方に厚く御礼申し上げたい。

いまさらながら、発表スライドやブログ記事へのリンクがまとめられている Tsukuba.R #9 のWikiページはこちらである。
また当日の様子は

を参照いただきたい。

ところで今回のTsukuba.R、前回が2010年9月19日だった事と考え合わせると実に419日、月にして約13ヶ月もの時を経ての開催であった。

> t1 <- as.Date("2010-9-19")
> t2 <- as.Date("2011-11-12")
> difftime(t2, t1, units="days") 
Time difference of 419 days

一体なぜかくも長くの間つくばRは開催されなかったのだろうか。

なぜ#8と#9の間がここまで空いたのか

Tsukuba.R #9は本来3月に開催されるはずであった。

が、震災の影響を鑑み一旦延期、その後も何度か開催を待つ声はあったのだが、
Tsukuba.Rを中心となって運営していた野郎どもの予定がなかなか合わず11月まで来てしまった。

というより、「そろそろやろうぜ」を有言実行し、カレンダーとにらめっこして場所抑えて告知する「主催者」が不在だったのだと思う。
こう書くと他人事のようなので書きなおすと、

勉強会の主催なりRに関するブログを書いたりするのに必要なある種の情熱のようなものが、まず自分(wakuteka)自身から枯渇していた。ずっと無気力だったとかそういうわけではないけれど、他に心を占めていたことがあったり院での研究が迷走しかけたりしてRに関して何か発信していくことに興味を失いかけていた。

そんなこんなで延ばし延ばしになっていたTsukuba.Rの開催を後押ししてくれたのは、id:dichikaid:isseing333といったTokyo.Rで出会った人たちからのムチャ振り応援だった。一緒にごはんを食べている時に、「そういえばTsukuba.Rって次いつやるの」「ね、年内には......」「そっかそっかそれは良い、じゃあTokyo.Rで告知しよう」「えっ」という感じで見事に退路を断っていただき、

9月のTokyo.R#17で、LTをさせてもらったことでid:gepuro君が発表に名乗りを上げてくれたり、id:tsutatsutatsutaが乗ってくれてKashiwa.R#1につながったりもした。

興味を共有できる場は楽しい

そんなこんなでなんとなく再確認したのは、何かを面白がっている人の話を聞きにいくのは楽しいという事だった。
本を紐解けないほど学習のモチベーションが下がっていたとしても、勉強会に行きさえすれば(足を運ぶくらいの余裕さえあれば)眠っていた興味が起こされてくるものだなというのを実感した。
ひとりでなにかを学ぼうとしても、往々にしてその情熱は持続できないことがある。
それは単に意思が弱いとかそういう理由で片付けてしまうべきではなくて、自分の中の情熱の炎が弱まっていたら、近い興味を持っている、似たようなことを面白がっている人に会いに行けさえすればある種のやる気はまた湧いてくるものなんじゃないか。
ざっくりまとめると、みんな勉強会やろうぜ!(行こうぜ!) ということで。

興味と情熱を継続するための無理のない仕組み

最後にR Advent Calendarがとてもとても面白かった参加して良かったと書いて今日の記事を締めることにする。発起人@kos59125ありがとう。
興味と情熱を持続するために、人に会い勉強会に参加しに行くのは実はわりと骨だ。時間もお金もかかるしある程度の勇気がいる。言いたいこと聞きたいことをやりとりするだけのコミュニケーション力も要る。気分なりテンションなりが外向きにイケイケの時はいいけれど、内向きでいたいような時はハードルが高かったりするかもしれない。
要は、興味を共有できる「場」は同じ時間同じ場所に集まらなくても醸成できるのではないかって思うのだ。
そういう意味でこのR Advent Calendarは新鮮で刺激的で楽しかった。
12月に限らずなにか理由をつけて年に何回でもやりたいような気さえする。来年2012年、あと数分でやって来るけど、こういう感じでオンラインでも興味を共有できる「場」に加わりたいなぁ。

結局一年を振り返る記事になってしまった。来年もよろしくお願いいたします。

Merry chRistmas!


## http://d.hatena.ne.jp/Zellij/20111205/p1
## MerryChristmas.R

library(grid)
par(bg="blue4")
plot.new()
plot.window(ylim=c(-4,4),xlim=c(-3,3))
curve(sqrt(1-x^2)+(x^2)^(1/3), -1, 1, lwd=11,col="#FF0000",add=T)
curve(-sqrt(1-x^2)+(x^2)^(1/3), -1, 1, lwd=11,col="#FF0000",add=T)
axis(1,pos=0,col="grey",col.axis="#C0C0C0")
axis(2,pos=0,las=2,col="#C0C0C0",col.axis="#C0C0C0")

  x <- stats::runif(50)
  y <- stats::runif(50)
rot <- stats::runif(50, 0, 360)
text <- c("\115\145\162\162\171\040\103\150\162\151\163\164\155\141\163\041")
grid.text(text,
         x=x,
         y=y,
         rot=rot,
         gp=gpar(fontsize=10, col="#C0C0C0")
         )   

静かな森に雪が降るよなアニメーションとかやりたかったけどまたいつかの機会に。

よく考えたらハートを描く必然性はなかった!!メリークリスマス!!!

追記

id:tor_ozakiワンライナーでgridパッケージ使わずに書いてくれたよ! あと、こっちの方程式使ったほうがなんだかグッと来る(個人的に)

plot(0,typ="n",xli=c(-100,100),yli=c(-100,100));`for`(i,1:50,{t<-1:360;points(16*sin(t)^3,13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t),co="red");text(runif(1,-100,100),runif(1,-100,100),lab="Merry Xmas",srt=runif(1,-90,90),family=c("Osaka"),col="grey")})

文芸的な、あまりに文芸的な (R Advent Calendar 2011)

一 「ドキュメント」らしいドキュメントの有るプログラム

 僕は「ドキュメント」らしいドキュメントの無いRのプログラムを不完全なものとは思つてゐない。従つて「ドキュメント」らしいドキュメントの有るプログラムばかり書けとも言はない。第一僕のプログラムも大抵は「ドキュメント」を欠いてゐる。絵画は解説がなくとも成り立つ。それと丁度同じやうにプログラムはドキュメントがなくとも成り立つものである。(僕の「ドキュメント」と云ふ意味は単に「コメント」と云ふ意味ではない。)若し厳密に云ふとすれば、全然「コメント」のない所にさえプログラムは成り立つであらう。従つて僕は「ドキュメント」のない簡潔なプログラムにも勿論尊敬を表するものである。

 しかし或解析の見通しを良くし、再利用性を高めるのは決してコードの短さではない。況や実行にかかる数秒程度の余分は評価の埒外にあるはずである。更に進んで考へれば、ソースコードの有無さへもかう云ふ問題には没交渉である。僕は上にも書いたように「ドキュメント」の無いソースコードを、――或は「ドキュメント」らしいドキュメントの無いソースコードを不完全なものとは思っていない。しかしこうでないRプログラミングも存在し得ると思ふのである。

二 如何にしてドキュメントを書くかに答ふ

 次に僕は如何にしてRで「ドキュメント」らしいドキュメントのあるプログラムを書くかという問いに答へる責任を持つてゐる。試みにMASSパッケージのcatsというデータセットを用ゐて説明する。
 昔々あるところに144匹の猫が居た。何でも薄暗いじめじめした所でニャーニャー泣いているうちに気づけば心の臓を抜き取られその重さを量られていたという。猫の犠牲に敬意を表し、いま心重量(Hwt)と体重(Bwt)の間に直線的な相関関係があるか、性別(Sex)で違いがあるかを見たいとする。

sample.R
library(lattice)
library(xtable)
data(cats, package = "MASS")
lm1 <- lm(Hwt~Bwt*Sex, data = cats)
lm1
print(xyplot(Hwt~Bwt|Sex, data = cats, type = c("p", "r")))

上のソースコードをRの統合開発環境であるRStudioで実行すると下のような画面が得られる。


 めでたし。

 ところが、データを解析して可視化すれば終わりというではない。
 一週間、あるいは一ヶ月、一年後に同様の解析をしなければならない、ということはよくあるだろう。
 8行程度のコードなら覚えていられるかもしれない。しかし実際の解析に用いるプログラムやデータは複数のファイルに複雑怪奇に入り組んでいることがある。時間が経つとどのデータファイルをどこに保存したか、どの関数のどのオプションを用いたか、そもそもどういう経緯でその解析を行ったのか分らなくなってしまうという事態を経験したのは僕だけではあるまい。

そこで、

  • どのようなデータに対して
  • どのような解析を行い
  • どのような結果が得られたか

をこまめにまとめておくことが重要になってくる。例えば以下のように。

実物はここsample.pdf 直からダウンロードできるようにした。

驚くなかれ、このPDFは以下のコードから生成されたものである。
RのコードをLaTeXに埋め込んでPDFを生成するこのシステムは、WEBをもじってSweaveと呼ばれている。

sample.Rnw
\documentclass[a4paper]{article}

\usepackage[margin=20mm]{geometry}
\usepackage[noae]{Sweave}

\DefineVerbatimEnvironment{Sinput}{Verbatim}{
  fontsize=\scriptsize,
  fontfamily=courier,frame=single,framesep=2mm,
  label={R Code},labelposition=topline} %numbers=left
\DefineVerbatimEnvironment{Soutput}{Verbatim}{
  fontsize=\scriptsize,fontfamily=courier}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=\small}

\begin{document}
<<echo=false,results=hide>>=
library(lattice)
library(xtable)
data(cats, package = "MASS")
@
\section{The Cats Data}

Consider the \texttt{cats} regression example from 
Venables \& Ripley (2002)~\cite{venables2002modern}.
The data frame contains measurement of heart and body weight of \Sexpr{nrow(cats)}
cats (\Sexpr{sum(cats$Sex=="F")} female, \Sexpr{sum(cats$Sex=="M")} male).

A linear regression model of heart weight by sex and gender can be fitted in R 
using the command
<<>>=
lm1 <- lm(Hwt~Bwt*Sex, data = cats)
lm1
@
Tests for siginificance of the coefficients are shown in Table~\ref{tab:coef},
a scatter plot including the regression lines is shown in Figure~\ref{fig:cats}.

\SweaveOpts{echo=false}

<<results=tex>>=
xtable(lm1, caption="Linear regression model for cats data.", label="tab:coef")
@

\begin{figure}[!h]
  \begin{center}
<<fig=TRUE,width=12,height=6,echo=T>>=
print(xyplot(Hwt~Bwt|Sex, data=cats, type=c("p", "r")))
@
  \caption{The cats data from package MASS.}
  \label{fig:cats}
  \end{center}
\end{figure}

This PDF file have been generated on \today
with \Sexpr{version$version.string} on a  
\Sexpr{sub("_"," ",version$platform,)}.
\bibliographystyle{unsrt}
\bibliography{sample}
\end{document}


いや、Sweaveは知っている、ただLaTeXを含めたTeX環境の導入の壁が高いのだとの声があるかもしれない。しかしRStudioの登場によって状況は大きく変わった。だってRStudioには "Compile PDF" ボタンがあるのだ。

ポチッとな。

三 僕

 最後に僕の繰り返したいのは僕も亦今後側目もふらずに「ドキュメント」らしいドキュメントのあるソースコードばかり作るつもりはないと云ふことである。僕等は誰も皆出来ることしかしない。僕の行なっている解析が常にかう云ふプログラムを作ることに適してゐるかどうかは疑問である。のみならずかう云ふプログラムを作ることは決して並み並みの仕事ではない。僕のRを好むのはRはあらゆるプログラミング言語の形式中、最もいいかげん包容力に富んでゐる為に何でもぶちこんでしまはれるからである。若しラムダ式の完成した(((括弧)の)(国))に生まれていれば、僕は或は院生よりもプログラマになってゐたかもしれない。僕はいろいろの言語たちに何度も色目を使つて来た。しかし今になつて考へて見ると、最も内心に愛してゐたのは統計解析兼可視化環境のGNU S――わがR言語だつた。

芥川龍之介 文芸的な、余りに文芸的な
Getting Started with Sweave: R, LaTeX, Eclipse, StatET, & TeXlipse
文芸的プログラミング - Wikipedia
http://www.okada.jp.org/RWiki/?Sweave%20%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%CC%F5
CRAN Task View: Reproducible Research
R Advent Calendar 2011 : ATND

四 蜜柑

Sweaveコードの解説、実運用上のハマりどころ、学会発表一週間前にBlog更新にかまけていて大丈夫か、文体が保てていないぞ、Tsukuba.Rのレポートはどうした等に関しては、はい、がんばります。
蜜柑食べたい。