2016-10-18 7 views
0

私は.csvファイルをアップロードしていくつかの自動計算を実行できるアプリ(これは削除されたバージョンです)を開発しています(この場合、 r.squared値)。複数のスプレッドシートが多数存在するので(それぞれはすべて一意の名前を持つことができます)、r.squaredの値をすべて1つのサマリーテーブル(2番目のタブ)に保存できるかどうかは疑問でした。その後、すべてのファイルを介して行ってきた後、単一.csvのファイルとしてエクスポートすることができます(私はこの最後の部分を行うためのアクションボタンに慣れていRの光沢のあるデータ出力を永続的に保存

私は2つのワークフローオプションがあります。(

  1. 複数のファイルをまたはフォルダを一度にロードできます)
  2. 各ファイルは個別にロードされます

ui.R

library(shiny) 
ui <- fluidPage(
    navbarPage("Menu",inverse=TRUE,fluid=TRUE,collapsible=TRUE,selected = "Data input", 
     tabPanel("Data input", 
        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') 
      ) 
     )), 


     tabPanel("Summary",fluidRow(
      column(6, 
        tableOutput("summary")))) 

     )) 

server.R

server <- function(input, output) { 
      mydata<-reactive({ 
      inFile <- input$file1 

      if (is.null(inFile)) 
      return(NULL) 

      data<-read.csv(inFile$datapath, header=input$header, sep=input$sep, 
       quote=input$quote) 

      data 
      }) 

      output$contents <- renderTable({ 
      mydata() 
      }) 

      output$summary <- renderTable({ 

      m<-lm(mydata()[,1]~mydata()[,2]) 
      summary(m)$r.squared 

      }) 

      } 


    shinyApp(ui, server) 
+0

おそらく、グローバル変数http://shiny.rstudio.com/articles/scoping.htmlが必要です。 –

答えて

0

私はこのようなもののためにreactiveValuesを使用します。 これはリストのように機能しますが、反応的なので、セッション中に変更することができます。 ここでは、セッション全体で計算されたRの二乗値を格納するために使用する例を示します。

基本的に上記のコードです。 サーバーでは、mdata()を再評価するたびにstorage$RsquaredにRの平方を付け加えたオブジェクトstorageobserveEventが含まれていました。

これは単なる基本例です。 observeEventに条件を追加すると、より洗練された状態にすることができます。 または単に数値以外のデータを収集したい場合は、別の種類のデータ構造をreactiveValueに入れます。

UI

ui <- fluidPage(
    navbarPage("Menu",inverse=TRUE,fluid=TRUE,collapsible=TRUE,selected = "Data input", 
    tabPanel("Data input", 
     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') 
     ) 
    ) 
    ), 
    tabPanel("Summary", fluidRow(column(6, tableOutput("summary")))) 
)) 

サーバー

server <- function(input, output) 
{ 
    storage <- reactiveValues(Rsquared = numeric()) 

    mydata <- reactive({ 
    inFile <- input$file1 
    if(is.null(inFile)) return(NULL) 
    data<-read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote) 
    data 
    }) 

    output$contents <- renderTable({ 
    mydata() 
    }) 

    observeEvent(mdata(),{ 
    m <- lm(mydata()[,1]~mydata()[,2]) 
    storage$Rsquared <- append(storage$Rsquared, summary(m)$r.squared) 
    }) 

    output$summary <- renderTable(storage$Rsquared) 
} 

その後、あなたはすべてのRは、彼が作成した値を乗保存するユーザーのためのダウンロード機能を追加することができます。 ダウンロード機能にはstorage$Rsquaredが使用され、たとえば.csvに書き込まれます。

関連する問題