SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
RGtk2入門
―Rで作るGUIアプリ―


 大阪大学人間科学研究科
   博士後期課程
 林真広(@phosphor_m)
自己紹介

 社会学
 メディア論,インターネット研究
 主に質問紙調査(アンケート)のデータを分析していま
  す
 Osaka.Rやってます
今日の目的

 RGtk2で手軽にGUIを作る
 RのGUIをもっと充実させたい
   Rはプログラミングができない人も使っている
  • 初心者用デモ
  • 繰り返しの作業をマウスで誰でもできるように
  もっと手軽にグラフを描きたい
   • グラフィックスを対話的に調整
Rで使えるGUIツールキット

 tcltk
  組み込みパッケージ
  手軽だが低機能
 rJava
  Rからjavaを使うためのパッケージ
  javaの知識が必要
 RGtk2
  高機能
  基本的にはRの知識だけで大丈夫
GTK+とは?

 GTK+ (The GIMP Toolkit) はGIMPの実装のため
  に開発されたGUIツールキットで、Gimp Tool Kitの
  略である。オープンソースのGUIツールキットの中での
  品質の良さに注目され、GNOMEデスクトップ環境のツー
  ルキットとして採用される。(Wikipediaより)
 RGtk2はGTK+2をR上で使うためのパッケージ
RGtk2を使ったパッケージ

 RGtk2DfEdit
 pmg
 rattle
 memiscGUI(作ってます!)
RGtk2のインストール

 RGtk2パッケージをインストール
 library(RGtk2)
 「GTKがない」というエラーとともに,Gtkをインストール
  するかどうか尋ねるダイアログが出る
 「Install GTK+」を選ぶとダウンロード&インストール
  が始まる
 インストール終了後,再起動
Hello, world!

lab <- gtkLabelNew("Hello, world!")
win <- gtkWindowNew()
gtkWindowSetTitle(win, "Test")
gtkContainerAdd(win, lab)
Widgetのクラス

lab <- gtkLabelNew("Hello, world!")
win <- gtkWindowNew()
gtkWindowSetTitle(win, "Test")
gtkContainerAdd(win, lab)

 下線がクラス,斜体がメソッド
 クラスの継承あり
   GtkWindowはGtkContainerの下位クラス
GtkWindowクラスの階層

 GObject
  GInitiallyUnowned
  • GtkObject
   • GtkWidget
     • GtkContainer
       • GtkBin
         • GtkWindow

 探している機能が,上位のクラスのメソッドな場
 合がある
簡略記法

lab <- gtkLabelNew("Hello, world!")
win <- gtkWindowNew()
win$setTitle("Test")
win$add(lab)

 「object$method」という簡略記法もある
   第1引数は省略する
 キャメルケース可
プロパティへのアクセス

win <- gtkWindowNew()
win["title"] <- "Test"
# win$setTitle("Test") と同じ

 オブジェクトにはプロパティがある
 リストのようにアクセスできる
 names(object$getPropInfo()) でどんなプロパティ
  があるかわかる
 詳細はGtkのリファレンスで(RGtk2のヘルプは未完成)
Hello, World! 2
win <- gtkWindowNew()
btn <- gtkButtonNew()
win$setDefaultSize(50, 50)
btn$setLabel("OK")
win$add(btn)

gSignalConnect(btn,"clicked",
               quote(cat("Hello, world!")))

 ボタンを押すと”Hello, World!”がコンソールに表示さ
 れる
ボタンに機能を付ける

gSignalConnect(btn,"clicked",
               quote(cat("Hello, world!")))

 第1引数は機能を付けるオブジェクト
 第2引数("clicked")はオブジェクトが起こすイベント
 第3引数はイベントが起こったときに実行される関数
 (または関数呼び出し)
シグナル(signal)




   GTK+のリファレンスマニュアルより
   イベントが起こるとシグナルが発せられる
   シグナルと処理が結び付けられていた場合,処理を実行する
   コールバック関数(イベントが起きたときに実行される処理)に
    渡される引数が重要
     この場合,シグナルを発したオブジェクト(gtkButton)と任意のデータ
コールバック関数の作り方

onClicked <- function(obj, data){
  sprintf("Button[%s] is %s",
          obj$getLabel(), data)
}
gSignalConnect(btn,"clicked",
               onClicked, data="is clicked!")

 第4引数(data)は任意のデータ
 引数としてlistを渡せば,コールバック関数に好きな
 だけデータを渡せる
実例:グラフィックスパラメータを変更する
      アプリケーション
 parが覚えきれない

          ウィンドウ


   パラメータ名         値

 こんなGUIがあれば便利かも
 parBox(“パラメータ名”)で,Windowの内部に配置す
 るWidgetを返す関数を作る
Widgetの作成

parBox <- function(par){ #ここから関数定義
  label <- gtkLabelNew(par)
  entry <- gtkEntryNew()
  hbox <- gtkHBoxNew()
  hbox$packStart(label)
  hbox$packStart(entry)
# 引数parは,グラフィックスパラメータ名
# まず,必要な部品(widget)を用意する
グラフィックスパラメータの処理
val <- par()[[par]] # グラフィックスパラメータの値取得
if (is.character(val)) # 値が文字列かどうかで分岐
  val <- paste("¥"", val, "¥"" , sep="", collapse=",")
else
  val <- paste(as.character(val), sep="", collapse=",")

  entry$setText(val) # 値をgtkEntryにセット
  gSignalConnect(entry, "activate", onEntryActivated, par)
  # entry内でエンターを押したときの処理
  return(hbox)
} # 関数定義終わり
コールバック関数

onEntryActivated <- function(obj, label){
  text <- obj$getText()
  text <- iconv(text, "UTF-8",
                localeToCharset()[1])
  # widget内で文字列はUTF-8なので,
  # ロケールを取得してエンコード変換
  text <- sprintf("par(%s=c(%s))", label, text)
  print(text)
  eval(parse(text=text))
}
とりあえず実行

hbox <- parBox("mfrow")
win <- gtkWindowNew(show=FALSE)
win$add(hbox)
win$showAll()
全グラフィックスパラメータ一覧&変更
parGUI <- function(){
  par.names <- names(par())
  hboxes    <- lapply(par.names, parBox)
  vbox      <- gtkVBoxNew()
  lapply(hboxes, vbox$packStart)

    sw <- gtkScrolledWindowNew()
    sw$addWithViewport(vbox)

    win <- gtkWindowNew(show=FALSE)
    win$add(sw)
    win$showAll()
}
実行

parGUI()
レイアウト用Widgetの種類(1)

win   <- gtkWindowNew(show=FALSE)
note <- gtkNotebookNew() # タブインターフェース
paned <- gtkVPanedNew() # 二分割レイアウト
hbox <- gtkHBoxNew() # widgetを横に詰め込む
vbox <- gtkVBoxNew() # widgetを縦に詰め込む
label <- gtkLabelNew("Label")
entry <- gtkEntryNew()
entry$setText("Entry")
btn1 <- gtkButtonNewWithLabel("Button1")
btn2 <- gtkButtonNewWithLabel("Button2")
レイアウト用Widgetの種類(2)

win$add(note)
note$appendPage(paned)
paned$add1(vbox)
paned$add2(hbox)
vbox$packStart(label)
vbox$packStart(entry)
hbox$packStart(btn1)
hbox$packStart(btn2)

win$showAll()
レイアウト用Widgetの種類(3)

              gtkNotebook


  gtkVBox


  gtkHBox
              gtkVPaned
参考になるもの(1)

 RGtk2のチュートリアルはlibrary内のPDF
   ビニエットにはなっていない
 クラスのヘルプは未完成だが有用
   ?GtkButton などとすると,クラスのヘルプが見られる
  クラスのヘルプにはそのクラスのメソッド一覧,ヒエラルキー,
   簡単なexampleがなどある
  最後尾に本家GTK+のリファレンスマニュアルへのリンク
  • signalとpropertyは本家でもRGtk2でも同じなので,とても有用
参考になるもの(2)

 本家のwidget一覧
  http://library.gnome.org/devel/gtk/unstable/ch02.html

 Ruby/GTK2 チュートリアル
  http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut

 Ruby,Python,PHPのGTK+のサンプル・文書は,これら
 の言語を知らなくても役に立つ
  RGtk2の資料は皆無に等しいので,他言語でのノウハウを流用
  慣れてきたら,RGtk2DfEdit(RGtk2を使ったパッケージ)の
  ソースを読むとよい
まとめ

 簡単な機能のものはすぐ作れる
 組み合わせていけば多機能に
 資料は,他言語のものならたくさんある
 ggplot2のGUIとかどうでしょう?

Mais conteúdo relacionado

Destaque

平面グラフ
平面グラフ平面グラフ
平面グラフ
yutaka1999
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
Rでピボットテーブル
Yohei Sato
 
Japan.R #2 Introduction to R
Japan.R #2 Introduction to RJapan.R #2 Introduction to R
Japan.R #2 Introduction to R
SAKAUE, Tatsuya
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理する
Shintaro Fukushima
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)
Shintaro Fukushima
 

Destaque (19)

オレオレR-GUIを作りたい
オレオレR-GUIを作りたいオレオレR-GUIを作りたい
オレオレR-GUIを作りたい
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
平面グラフ
平面グラフ平面グラフ
平面グラフ
 
3次元のデータをグラフにする(Tokyo.R#17)
3次元のデータをグラフにする(Tokyo.R#17)3次元のデータをグラフにする(Tokyo.R#17)
3次元のデータをグラフにする(Tokyo.R#17)
 
はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力
 
Rデータフレーム自由自在
Rデータフレーム自由自在Rデータフレーム自由自在
Rデータフレーム自由自在
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
Rでピボットテーブル
 
Japan.R #2 Introduction to R
Japan.R #2 Introduction to RJapan.R #2 Introduction to R
Japan.R #2 Introduction to R
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理する
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
機械学習を理解するための数学テクニック勉強会 Lagrange 未定乗数法
機械学習を理解するための数学テクニック勉強会 Lagrange 未定乗数法機械学習を理解するための数学テクニック勉強会 Lagrange 未定乗数法
機械学習を理解するための数学テクニック勉強会 Lagrange 未定乗数法
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)
 
初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
Rの導入とRStudio事始め(改訂版)
Rの導入とRStudio事始め(改訂版)Rの導入とRStudio事始め(改訂版)
Rの導入とRStudio事始め(改訂版)
 
Rstudio事始め
Rstudio事始めRstudio事始め
Rstudio事始め
 
ランダムフォレスト
ランダムフォレストランダムフォレスト
ランダムフォレスト
 
Deep parking
Deep parkingDeep parking
Deep parking
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 

Semelhante a RGtk2入門

ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
 

Semelhante a RGtk2入門 (20)

Jetpack Workshop
Jetpack WorkshopJetpack Workshop
Jetpack Workshop
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべる
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
Easy caching and logging package using annotation in Python
Easy caching and logging package using annotation in PythonEasy caching and logging package using annotation in Python
Easy caching and logging package using annotation in Python
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 

Mais de Masahiro Hayashi

Mais de Masahiro Hayashi (6)

初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Rzパッケージの紹介
Rzパッケージの紹介Rzパッケージの紹介
Rzパッケージの紹介
 
重回帰職人の朝は早い
重回帰職人の朝は早い重回帰職人の朝は早い
重回帰職人の朝は早い
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
Rzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイスRzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイス
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 

Último

Último (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

RGtk2入門