読者です 読者をやめる 読者になる 読者になる

ふんわり R-tips

ぜんぜんわからない、俺たちは雰囲気でRをやっている

Shinyサンプルアプリケーション「09_upload」の説明

09_uploadは、ファイルをアップロードして表示する例です。CSVファイルをアップロードして、ヘッダやセパレータを指定すると、表として出力します。

「09_upload」の実行

library(shiny)
runExample("09_upload")

f:id:phmpk:20161230160638p:plain

server.R

library(shiny)

function(input, output) {
  output$contents <- renderTable({
    
    # input$file1は、初期状態ではNULL
    # ユーザがアップロードするファイルを選んでから、'name', 'size', 'type',
    # 'datapath'を含むデータフレームになる。
    # 'datapath'は、カレントディレクトリから参照できるローカルなファイル名

    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)
    
    read.csv(inFile$datapath, header=input$header, sep=input$sep, 
                 quote=input$quote)
  })
}

Code license:MIT

  • input$file1は初期状態ではNULLなので、if文でNULLチェック

  • input$file1にファイルが指定されたとき、inFileにファイルのデータフレームが代入される

  • inFileのデータフレームでは、inFile$datapathでファイルへのパスが参照される

  • read.csv()で、header, sep, quoteで指定されたヘッダやセパレータでcsvファイルを開く

ui.R

library(shiny)

fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv', 
                                 'text/comma-separated-values,text/plain', 
                                 '.csv')),
      tags$hr(),
      checkboxInput('header', 'Header', TRUE),
      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   ','),
      radioButtons('quote', 'Quote',
                   c(None='',
                     'Double Quote'='"',
                     'Single Quote'="'"),
                   '"')
    ),
    mainPanel(
      tableOutput('contents')
    )
  )
)

Code license:MIT

  • サイドバーに、ファイルアップロードのfileInput()、チェックボックスcheckBoxInput()、ラジオボタンradioButtons()を配置

  • fileInputの引数acceptでMIME(Multipurpose Internet Mail Extension)タイプを指定する。'text/csv', 'text/comma-separated-values,text/plain', '.csv'は、コンマで区切られたcsvファイルを指定している

  • tagsは、HTMLで指定したタグを挿入する関数