ちょっとしたポップアップ代わりにShinyを使う

Rでパスワードを入力するときには.rs.askForPassword()が便利ですが、たしかこの関数は↓のIssueで見つけました。

で、そういえばHadleyが別解としてShinyがどうとか言ってたなあ、と思い出してちょっと使ってみました。

どこでつかったのかというと、つくった本人も忘れるくらい放置されている(笑)このkokudosuuchiパッケージです。最新バージョンのpurrrだと動かなくなっていたので直すついでに色々触ってみていました。

prefCodeというパラメータがあるんですが、これは、47都道府県それぞれにコードが割り当てられていてこのページとにらめっこして探してくるんですけど、 さすがにそれは大変すぎる!ということで、チェックボックスをポチポチとクリックしたらコードを返してくれるShnyアプリ?をつくりました。

library(kokudosuuchi)
#> このサービスは、「国土交通省 国土数値情報(カテゴリ名)」をもとに加工者が作成
#> 以下の国土数値情報ダウンロードサービスの利用約款をご確認の上ご利用ください:
#> 
#> http://nlftp.mlit.go.jp/ksj/other/yakkan.html

choose_prefecture_code()
#> 
#> Listening on http://127.0.0.1:5621

とやると、ウィンドウが現れます。(レイアウトは適当です。すみません…)

f:id:yutannihilation:20160503213858p:plain:w400

これをポチポチして「Done」を押すと…

#> [1] "2"  "24"

という感じで都道府県コードがわかります。

Shinyは、こういうインタラクティブな感じでやるちょっとした作業にも便利ですね。使い方覚えていきたいです。

今回使ったやつのソースはこういう感じ:

data("KSJprefCodes", package = "kokudosuuchi")

choose_prefecture_code <- function() {
  shiny::runApp(
    shiny::shinyApp(
      shiny::fluidPage(
        "Pref Code Chooser",
        shiny::checkboxGroupInput(
          inputId = "prefecture",
          label = "Check prefectures",
          choices = purrr::set_names(KSJprefCodes$prefCode, KSJprefCodes$prefName),
          inline = TRUE,
          width = '400px'
        ),
        shiny::actionButton("done", "Done")
      ),
      function(input, output) {
        shiny::observe({
          input$done
          if (input$done > 0)
            shiny::stopApp(shiny::isolate(input$prefecture))
        })
      }
    ))
}