上传文件并使其在R shine中全局化

时间:2015-01-23 10:37:19

标签: r shiny

我将文件上传到闪亮(csv或excel),然后用文件数据创建一个对象。我希望这个对象是全局的,因为我使用不同输出的数据。

我的原始(简化)server.R代码是:

shinyServer(function(input, output) {

  output$contents <- renderTable({

    inFile <- input$file1 
    if (is.null(inFile))
  return(NULL)
data <- read.csv(inFile$datapath, header = input$header, sep = input$sep,       quote = input$quote, dec = ".")

 data

  })

  output$grafic <- renderPlot({

    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)

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

    barplot(table(data$SEVERIDAD), main="Severitat dels riscos detectats")

      })
})

所以,我必须重复代码才能创建对象&#34;数据&#34;两次。

在阅读其他帖子后,我尝试了这段代码,但没有工作:

    inFile <- input$file1 
    if (is.null(inFile))
      return(NULL)
    data <- read.csv(inFile$datapath, header = input$header, sep = input$sep,       quote = input$quote, dec = ".")


shinyServer(function(input, output) {

data <- reactive(data)
  output$contents <- renderTable({

data <- data()
data

  })

  output$grafic <- renderPlot({

     data <- data()

    barplot(table(data$SEVERIDAD), main="Severitat dels riscos detectats")

      })
})

我认为最后一段代码不起作用,因为加载应用程序时无法上传文件。

谢谢!

1 个答案:

答案 0 :(得分:3)

为数据创建一个反应式表达式,然后将其用于所有魔法......注意代码尚未经过测试且仅供本地使用(如果有效,请告诉我)...对于全局实现您可以使用<<-作为赋值运算符

shinyServer(function(input, output) {

  # Read the file into my_data, storing the data in this variable
  my_data <- reactive({
    inFile <- input$file1 
    if (is.null(inFile))
      return(NULL)
    data <- read.csv(inFile$datapath, header = input$header, sep = input$sep,quote = input$quote, dec = ".")
    data
  })
  # Create the table
  output$contents <- renderTable({
    my_data()
  })
  # Create a plot
  output$grafic <- renderPlot({    
    barplot(table(my_data()$SEVERIDAD), main="Severitat dels riscos detectats")

  })
})