SlideShare a Scribd company logo
Rが苦手な人に使って頂く
              ~RコマンダーとRookと私~



        2012/03/10
        Tokyo.R #21
          和田 計也
サイバー系
サイバー系


     はじめに



     ※この発表は個人の
     見解であり、所属す
     る組織の公式見解で
     はありません。

2012/03/10               1
サイバー系


     自己紹介

  和田 計也(@wdkz)
         静岡県袋井市出身



  サイバー系企業でデータマイニングエンジニア職
         創立記念日が3月18日
         社長の出身地が福井県鯖江市



  前職はバイオベンチャー
         バイオマーカ探索してた
         学生時代は枯草菌の研究




2012/03/10                          2
サイバー系


     アメーバピグで遊んでみた




                    http://pigg.ameba.jp
2012/03/10                                 3
サイバー系


     作ってみた
            holiday()関数




2012/03/10                         4
サイバー系


     問題提起

  Rはいろんなことができて素晴らしいですよ!
        休日もわかるよ!バースデー問題も秒殺!
        でも、「いいから使ってみて下さい」って言ってもな
         かなか使ってくれないよね
        コマンド?何それ?
 問題点
        GUIがない
        マウスでポチっとな~ができない
 解決策
        Rコマンダー
        Webアプリで作っちゃう

2012/03/10                              5
サイバー系


     Rコマンダー

 Rコマンダーとは?
            RのGUIの一つ
                R StudioとかRattleとか,,



 利点
            マウス使える


 インストール
            install.packages(“Rcmdr”)



 起動
            require(Rcmdr)




2012/03/10                                       6
サイバー系


     Rコマンダー使用例

      λ=3のポアソン分布ってどんな確率分布だったけ?



                 ①
                     ③


             ②




2012/03/10                                7
サイバー系


     Rコマンダーの圧倒的な利点

      カスタマイズできる!!




2012/03/10                   8
サイバー系


     Rコマンダーの圧倒的な利点

      先ほどのholiday()関数を使ってもらう


                          ①
              ②


               ③




2012/03/10                              9
サイバー系


     Rコマンダーのカスタマイズ方法

   メニューバーにメニューを追加
          Rcmdrインストールフォルダ→etc→Rcmdr-menus.txt
             (C:¥Users¥wada_kazuya¥Documents¥R¥win-library¥2.14¥Rcmdr)




        ★このテキストファイルをエディタで編集する
2012/03/10                                                                   10
サイバー系


     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
サイバー系


     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
サイバー系


     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
サイバー系


     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
つぎ




2012/03/10   15
サイバー系


     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
サイバー系


     Webアプリ作った

   Rookで作った     source(“Rook.holiday.R”)
                 holiday.start()




        ★できた
2012/03/10                                      17
サイバー系


     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
サイバー系


     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
サイバー系


     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
サイバー系


     デモ




2012/03/10       21
サイバー系


     最後に

    CUI嫌いな人にRを使ってもらうには...              (使いこなすわけではない)
              Rコマンダーを使って、GUIを用意してやる
              Rookを使って、Webアプリ作って提供する


    ただし注意も必要
              Rコマンダーカスタマイズを複数ユーザに設定するのはちょっと面
               倒。しかも、Rcmdrアップデートするといろいろ消える
              Rookで実運用は(たぶん)できないのでrApacheとか使うといいか
               も




2012/03/10                                              22

More Related Content

What's hot

Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
MITSUNARI Shigeo
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
nabe-abk
 
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前にKosei ABE
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table についてHaruka Ozaki
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
magoroku Yamamoto
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門Shintaro Fukushima
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
yoku0825
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
matsuo kenji
 

What's hot (19)

Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前に
 
Rでreproducible research
Rでreproducible researchRでreproducible research
Rでreproducible research
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 

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

RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
Kazuya Wada
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25Nobuaki Oshiro
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25Nobuaki Oshiro
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
Midori Oge
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Taku Unno
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
Yu Ito
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪
Yu Ito
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 

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

RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 

More from Kazuya Wada

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
Kazuya Wada
 
DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話
Kazuya Wada
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
Kazuya Wada
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
Kazuya Wada
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
Kazuya Wada
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
Kazuya Wada
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
Kazuya Wada
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
Kazuya Wada
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
Kazuya Wada
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
Kazuya Wada
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
Kazuya Wada
 

More from Kazuya Wada (12)

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
 
DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 

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