Как построить график в приложении shiny после загрузки файла

#r #shiny

#r #блестящий

Вопрос:

У меня есть действительно простой CSV-файл.

 > head(data)
  X Y
1 1 1
2 2 2
3 3 4
4 4 8
  

Я пытаюсь создать панель управления shinny app, которая отображает эти данные после загрузки файла.

Это то, что у меня есть на данный момент.

 library(shinydashboard)


ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    fileInput("file1", "Choose CSV File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",
                         ".csv")),
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )
  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              fluidRow(
                box(plotOutput("plot1", height = 250))
              )
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
  )
)

server <- function(input, output) {
  options(shiny.maxRequestSize=100*1024^2)

  inFile <- input$file1
  data <- read.csv(inFile$datapath, header = input$header, stringsAsFactors = FALSE)

  output$plot1 <- renderPlot({
    plot(data)
  })
}

shinyApp(ui, server)
  

Но я получаю сообщение об ошибке

 Error in .getReactiveEnvironment()$currentContext() : 
  Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
  

Из того, что я прочитал, прочитанный файл должен быть реактивным, а затем его нужно вызвать с помощью графика, но я не знаком с концепциями reactive, любая помощь будет оценена.

Комментарии:

1. Я предлагаю вам просмотреть эти руководства, чтобы получить основную идею реактивного программирования с помощью Shiny: rstudio.com/resources/webinars/shiny-developer-conference

Ответ №1:

Вы можете сделать

 data <- reactive({
  inFile <- input$file1
  if(!is.null(inFile)){
    read.csv(inFile$datapath, header = input$header, stringsAsFactors = FALSE)    
  }
})

output$plot1 <- renderPlot({
  req(data())
  plot(data()$X, data()$Y)
})
  

Комментарии:

1. Спасибо, по вашему предложению приложение запускается сейчас, но на графике перед загрузкой файла отображается ошибка «Ошибка: требуются конечные значения xlim», а после того, как я загружаю файл, он меняется на другую ошибку «Ошибка: требуются конечные значения xlim», но на нем не отображается никакого графика

2. @JuanLozano Я только что отредактировал свой ответ. Работает ли это сейчас?

3. Я внес изменения, первая ошибка исчезла, но после загрузки я получаю эту ошибку «Ошибка: недопустимый тип аргумента»