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

upload file and make it global in R shiny

我将文件上传到 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")

      })
})

因此,我必须重复代码以创建对象 "data" 两次。

阅读其他帖子后,我尝试了此代码但不起作用:

    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")

      })
})

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

谢谢!

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

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")

  })
})