Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rが苦手な人にもRを使って頂くために~RcommanderとRook~

7,381 views

Published on

第21回 東京R勉強会での発表資料です

Published in: Education
  • Be the first to comment

Rが苦手な人にもRを使って頂くために~RcommanderとRook~

  1. 1. Rが苦手な人に使って頂く ~RコマンダーとRookと私~ 2012/03/10 Tokyo.R #21 和田 計也サイバー系
  2. 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属す る組織の公式見解で はありません。2012/03/10 1
  3. 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  創立記念日が3月18日  社長の出身地が福井県鯖江市  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究2012/03/10 2
  4. 4. サイバー系 アメーバピグで遊んでみた http://pigg.ameba.jp2012/03/10 3
  5. 5. サイバー系 作ってみた  holiday()関数2012/03/10 4
  6. 6. サイバー系 問題提起  Rはいろんなことができて素晴らしいですよ!  休日もわかるよ!バースデー問題も秒殺!  でも、「いいから使ってみて下さい」って言ってもな かなか使ってくれないよね  コマンド?何それ? 問題点 GUIがない マウスでポチっとな~ができない 解決策 Rコマンダー Webアプリで作っちゃう2012/03/10 5
  7. 7. サイバー系 Rコマンダー Rコマンダーとは?  RのGUIの一つ  R StudioとかRattleとか,, 利点  マウス使える インストール  install.packages(“Rcmdr”) 起動  require(Rcmdr)2012/03/10 6
  8. 8. サイバー系 Rコマンダー使用例  λ=3のポアソン分布ってどんな確率分布だったけ? ① ③ ②2012/03/10 7
  9. 9. サイバー系 Rコマンダーの圧倒的な利点  カスタマイズできる!!2012/03/10 8
  10. 10. サイバー系 Rコマンダーの圧倒的な利点  先ほどのholiday()関数を使ってもらう ① ② ③2012/03/10 9
  11. 11. サイバー系 Rコマンダーのカスタマイズ方法  メニューバーにメニューを追加  Rcmdrインストールフォルダ→etc→Rcmdr-menus.txt (C:¥Users¥wada_kazuya¥Documents¥R¥win-library¥2.14¥Rcmdr) ★このテキストファイルをエディタで編集する2012/03/10 10
  12. 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. 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. 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. 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.pdf2012/03/10 14
  16. 16. つぎ2012/03/10 15
  17. 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. 18. サイバー系 Webアプリ作った  Rookで作った source(“Rook.holiday.R”) holiday.start() ★できた2012/03/10 17
  19. 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. 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. 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. 22. サイバー系 デモ2012/03/10 21
  23. 23. サイバー系 最後に  CUI嫌いな人にRを使ってもらうには... (使いこなすわけではない)  Rコマンダーを使って、GUIを用意してやる  Rookを使って、Webアプリ作って提供する  ただし注意も必要  Rコマンダーカスタマイズを複数ユーザに設定するのはちょっと面 倒。しかも、Rcmdrアップデートするといろいろ消える  Rookで実運用は(たぶん)できないのでrApacheとか使うといいか も2012/03/10 22

×