передача данных из функции наблюдения для загрузки - PullRequest
0 голосов
/ 14 сентября 2018

Я снова застрял в своем первом блестящем приложении.До сих пор приложение работало нормально, но теперь я хотел загрузить сгенерированный мной график, и я не могу понять, как получить результаты из функции наблюдения.Поскольку я не могу сгенерировать график вне функции наблюдения, я подумал, что я бы назначил необходимые данные глобальной переменной, используя <<-, но если я запустил реактивную функцию, например, df.selected.columns(), это может вызвать ошибки.Может кто-нибудь дать мне подсказку, как поступить?Большое спасибо за любые предложения!Айше

Вот мой код:

ui <- shinyServer(
  fluidPage(
    tabsetPanel(

      tabPanel("Data upload",
               titlePanel("Data upload"),
               sidebarLayout(
                 sidebarPanel(
                   fileInput("file1", "Choose CSV File",multiple = TRUE, accept = c("text/csv","text/comma-separated-values,text/plain",".csv")),
                   tags$hr(),
                   checkboxInput("header", "Header", TRUE), radioButtons("sep", "Separator", choices = c(Comma = ",", Semicolon = ";",Tab = "\t"), selected = ","),
                   tags$hr(),
                   checkboxInput("disp", "Display",TRUE),
                   tags$hr(),

                   uiOutput("choose_first_column"),
                   uiOutput("choose_second_column"),
                   br()

                 ),
                 mainPanel(
                   tableOutput("contents"),
                   tags$hr(),
                   tableOutput("tab"),
                   tags$hr(),
                   uiOutput("download"),
                   plotOutput("headplot")
                )
               )
      ),
      tabPanel("2","2"
      )  

    )
  )
)

server <- shinyServer(
  function(input, output) {

       observe({      
    req(input$file1)


      df <-  read.csv(input$file1$datapath,
                      header = input$header,
                      sep = input$sep,
                      quote = input$quote)

      output$contents <- renderTable({
        (head(df))})

      output$choose_first_column <- renderUI({
        colnames <- names(df)
        selectInput("column_1", "Choose Date column", 
                    choices  = colnames,
                    selected = colnames)})

      output$choose_second_column <- renderUI({
        colnames <- names(df)
        selectInput("column_2", "Choose Variable column", 
                    choices  = colnames,
                    selected = colnames)})

      df.selected.columns <- reactive({
        df.columns <- df[,c(input$column_1,input$column_2)]
        return(df.columns)
      })

      output$tab <- renderTable({
        (head(df.selected.columns()))
      })

      Plot1 <- reactive({
        plot(head(df.selected.columns()[,2]))
      })

      output$headplot <- renderPlot({
        Plot1()
        })

#     This comes closest to what I wanted to do. However, now I can not select the columns anymore.            
#      try(result <<- head(df.selected.columns()[,2]),silent=T)
#     With this line it crushes straight away        
#      result <<- head(df.selected.columns()[,2])
       })

    output$download <- renderUI({
      if(!is.null(input$column_1) & !is.null(input$column_2)) {
        downloadButton('OutputPlot', 'Download Plot')
      }
    })

    output$OutputPlot <- downloadHandler(
      filename = function() {
        paste('plot', '.pdf', sep='')
      },
      content=function(file){
        pdf(file)
        plot(result)
        dev.off()
      })

  })  

runApp(list(ui = ui, server = server))

Пример ввода данных:

date    time    level
01.01.2000  00:00:00    0.3724
01.01.2000  01:00:00    0.192
01.01.2000  02:00:00    -0.0252

1 Ответ

0 голосов
/ 14 сентября 2018
  1. Удалите observe
  2. Сделать загруженный файл reactive
    • Обновить все ссылки на df до df(), так как теперь это реактивное выражение
  3. Добавьте соответствующие req() функции для предотвращения сообщений об ошибках
  4. В вашем downloadHandler у вас есть plot(result), но нет такой вещи, как result.Вы хотите Plot() или plot(df.selected.columns())
  5. Вы должны подтвердить, что выбранный разделитель фактически разделяет загруженную таблицу перед тем, как вы вернете загруженную таблицу.Без этого вы получите ошибки и странные результаты /

Вот обновленные функции df и downloadHandler, с которых можно начать:

        df <- reactive({
            req(input$file1)
            read.csv(input$file1$datapath,
                     header = input$header,
                     sep = input$sep,
                     quote = input$quote)
        })

        output$OutputPlot <- downloadHandler(
            filename = function() {
                paste('plot', '.pdf', sep='')
            },
            content=function(file){
                pdf(file)
                plot(head(df.selected.columns()[,2]))
                dev.off()
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...