More Related Content
Similar to Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Similar to Rが苦手な人にもRを使って頂くために~RcommanderとRook~ (20)
More from Kazuya Wada (12)
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
- 1. Rが苦手な人に使って頂く
~RコマンダーとRookと私~
2012/03/10
Tokyo.R #21
和田 計也
サイバー系
- 2. サイバー系
はじめに
※この発表は個人の
見解であり、所属す
る組織の公式見解で
はありません。
2012/03/10 1
- 3. サイバー系
自己紹介
和田 計也(@wdkz)
静岡県袋井市出身
サイバー系企業でデータマイニングエンジニア職
創立記念日が3月18日
社長の出身地が福井県鯖江市
前職はバイオベンチャー
バイオマーカ探索してた
学生時代は枯草菌の研究
2012/03/10 2
- 4. サイバー系
アメーバピグで遊んでみた
http://pigg.ameba.jp
2012/03/10 3
- 5. サイバー系
作ってみた
holiday()関数
2012/03/10 4
- 6. サイバー系
問題提起
Rはいろんなことができて素晴らしいですよ!
休日もわかるよ!バースデー問題も秒殺!
でも、「いいから使ってみて下さい」って言ってもな
かなか使ってくれないよね
コマンド?何それ?
問題点
GUIがない
マウスでポチっとな~ができない
解決策
Rコマンダー
Webアプリで作っちゃう
2012/03/10 5
- 7. サイバー系
Rコマンダー
Rコマンダーとは?
RのGUIの一つ
R StudioとかRattleとか,,
利点
マウス使える
インストール
install.packages(“Rcmdr”)
起動
require(Rcmdr)
2012/03/10 6
- 8. サイバー系
Rコマンダー使用例
λ=3のポアソン分布ってどんな確率分布だったけ?
①
③
②
2012/03/10 7
- 9. サイバー系
Rコマンダーの圧倒的な利点
カスタマイズできる!!
2012/03/10 8
- 10. サイバー系
Rコマンダーの圧倒的な利点
先ほどのholiday()関数を使ってもらう
①
②
③
2012/03/10 9
- 11. サイバー系
Rコマンダーのカスタマイズ方法
メニューバーにメニューを追加
Rcmdrインストールフォルダ→etc→Rcmdr-menus.txt
(C:¥Users¥wada_kazuya¥Documents¥R¥win-library¥2.14¥Rcmdr)
★このテキストファイルをエディタで編集する
2012/03/10 10
- 12. サイバー系
Rコマンダーのカスタマイズ方法
Rcmdr-menus.txtに以下を追加
Toolsメニューの下あたり(私の例では351行目の下)
menu antibayMenu topMenu "" "" "" ""
item antibayMenu command "休日チェキラ" tcl.holiday "" ""
item topMenu cascade "あんちべ!" antibayMenu "" ""
3行目:トップメニューに「あんちべ!」文字列を追加してそれをantibayMeruと命名
1行目:antibayMenuをトップメニューに追加
2行目:antibayMenuに「休日チェキラ」という子メニューを追加して、
それがクリックされたときにtcl.holiday関数が呼ばれるようにする
★勘のいい皆様ならなんとなくわかるでしょう
2012/03/10 11
- 13. サイバー系
Rコマンダーのカスタマイズ方法
ユーザ入力部分のUI(ダイアログ)は適当に作る
tcl.holiday <-function(){
initializeDialog(title="休日チェキラ") #ダイアログのタイトル
Var1 <- tclVar(substring(Sys.Date(),1,4)) #テキストボックスの初期値
Var1Entry <- tkentry(top, width=“20”, textvariable=Var1)
onOK <- function(){ #OKボタン押した時の挙動
closeDialog() #閉じて
XXX <- as.character(tclvalue(Var1)) #入力値を取得して
command <- paste(“holiday(‘”, XXX, “’)”, sep=“”) #holiday関数呼ぶ
doItAndPrint(command) #コマンド実行 #文字列生成
tkfocus(CommanderWindow()) #フォーカスを親に戻す
}
OKCancelHelp(helpSubject="+")
tkgrid(tklabel(top, text=gettextRcmdr(“いつ?”)), Var1Entry,
sticky=“e”) #テキストボックスの横のテキスト
tkgrid(buttonsFrame, columnspan=2, sticky=“w”) #ボタン設置
tkgrid.configure(Var1Entry, sticky="w") #?
}
2012/03/10 12
- 14. サイバー系
Rコマンダーのカスタマイズ方法
R-cmdr-menus.txtと同様に、関数定義ファイルもetcフ
ァイルに突っ込んでおく
Rcmdrインストールフォルダ→etc
(C:¥Users¥wada_kazuya¥Documents¥R¥win-library¥2.14¥Rcmdr)
★etcフォルダに突っ込んでおけば、Rcmdr起動時に勝手にロードしてくれる
2012/03/10 13
- 15. サイバー系
Rコマンダーのその他
Rコマンダーの注意点
Rcmdrのアップデートをしてしまうと、etcフォルダ内のフ
ァイルが初期化(消去)されてしまうので努力が水の泡に
Rコマンダーのカスタマイズ・他の方法
Rのパッケージ作るようにコンパイル済みのものを作ること
も可能。zipファイルを配布してRコマンダーからアドオンイ
ンポートしてカスタマイズ化できるからユーザにとってはこ
ちらのほうが嬉しい。
参考文献
http://www.okada.jp.org/RWiki/?RcmdrPlugin%C4%B6%C6%FE%CC%E7
http://cwoweb2.bai.ne.jp/~jgb11101/files/R-commander.pdf
2012/03/10 14
- 17. サイバー系
Webアプリ作っちゃう
Rook使う
Rは(おバカな)webサーバを内蔵しているんです!
Hello World的なのやってみよう
install.packages("Rook")
require(Rook)
s <- Rhttpd$new()
s$start(quiet=TRUE)
s$browse(1)
★webブラウザが起動して何やらそれっぽい雰囲気に
2012/03/10 16
- 18. サイバー系
Webアプリ作った
Rookで作った source(“Rook.holiday.R”)
holiday.start()
★できた
2012/03/10 17
- 19. サイバー系
RookでのWebアプリ作成方法・1
ユーザ入力部分のUI(htmlのフォーム)は適当に作る
Rook.holiday <- function(env) {
source("holiday.R")
req = Rook::Request$new(env)
res = Rook::Response$new()
res$write('いつ?:¥n')
res$write('<form method="POST">¥n')
res$write('<input type="text" name="xdim" value="2012">¥n')
res$write('<input type="submit" name="Go", value="holiday">¥n</form>¥n<br>')
#まだまだ続く
入力formはhtmlで力業で書く
2012/03/10 18
- 20. サイバー系
RookでのWebアプリ作成方法・2
ユーザ入力部分のUI(htmlのフォーム)は適当に作る・続き
#Rook.holiday関数の続き
if (!is.null(req$POST())) {
y <- req$POST()[["xdim"]] #テキストフォームの入力値を取得
holidays <- holiday(y) #holiday関数の結果を取得
res$write("<p>")
if(length(holidays)==1){
res$write(as.character(holidays))
}else if(is.matrix(holidays)){
for(i in 1:nrow(holidays)){
res$write(paste(as.character(holidays[i,1]), "<br>¥n", sep=""))
}
}else{
for(i in 1:nrow(holidays)){
res$write(paste(as.character(holidays[i,1]), " | ",
as.character(holidays[i,2]), "<br>",sep=""))
}
}
res$write("</p>")
}
res$finish()
}
結果もhtmlで力業で書く
2012/03/10 19
- 21. サイバー系
RookでのWebアプリ作成方法・3
Webサーバ起動部分
holiday.start <- function(){
s <<- Rhttpd$new() #グローバル領域に変数を作成
#前ページで定義したRook.holiday関数にholidayと名付けて
s$add(app = Rook.holiday, name = “holiday”)
s$start()
s$browse(“holiday”) #Rook.holiday関数を呼び出す
}
2012/03/10 20
- 22. サイバー系
デモ
2012/03/10 21
- 23. サイバー系
最後に
CUI嫌いな人にRを使ってもらうには... (使いこなすわけではない)
Rコマンダーを使って、GUIを用意してやる
Rookを使って、Webアプリ作って提供する
ただし注意も必要
Rコマンダーカスタマイズを複数ユーザに設定するのはちょっと面
倒。しかも、Rcmdrアップデートするといろいろ消える
Rookで実運用は(たぶん)できないのでrApacheとか使うといいか
も
2012/03/10 22