Выбор столбцов для рисования в R Shinydashboard - PullRequest
0 голосов
/ 04 марта 2020

Я создаю панель управления Shiny, которая позволяет пользователю загружать файл и, помимо прочего, выводит на экран выбранные столбцы из загруженного набора данных. Графики, которые я хочу включить, - это гистограмма, диаграмма рассеяния и линейный график. Для построения графиков я использую графическую библиотеку. Это боковое меню от ui.R, где я прошу пользователя загрузить файл

sidebarMenu(

        fileInput("file", "Upload your file"),
        menuItem("Upload options", tabName = "options", icon = icon("upload"),
                 menuSubItem(radioButtons("sep", "Separator",
                                          choices = c("Comma" = ",", "Tab" = "\t", "Space" = " ", "Semicolon" = ";"))),
                 menuSubItem(radioButtons("nas", "Handle missing values", 
                                          choices = c("Omit rows with NAs", "Replace with mean", "Replace with median"))),
                 menuSubItem(checkboxInput("header", "Header", value = TRUE))) 

Вот тело панели инструментов от ui.R

dashboardBody(
      tabItems(

        tabItem(tabName = "summary", verbatimTextOutput("struct")),




        tabItem(tabName = "spread", dataTableOutput("table")),

        tabItem(tabName = "viz",
                fluidRow(
                  box(title = "Histogram", plotlyOutput("histogram", height = 250)),
                  box(title = "Line chart"),
                  box(title = "Scatterplot"),
                  box(title = "Column selection", uiOutput("inputwidget"))


                )),

        tabItem(tabName = "about", tableOutput("contents"))








      )

Вот часть обработки данных server.R

data <- reactive({

    file1 <- input$file
    if(is.null(file1)){
      return()
      } else if(tools::file_ext(file1) == "csv") {
        read.csv(file = file1$datapath, 
                   sep = input$sep, 
                   header = input$header, 
                   skipNul = TRUE)
      } else if (tools::file_ext(file1) == "xlsx"){
        readxl::read_excel(path = file1$datapath)
      }
  })

  columns <- reactive({
    names(data())
  }) 

и вот часть, где я хочу создать фактическую гистограмму

 output$inputwidget <- renderUI({
    selectInput("col", "Select the column", choices = columns())
  })

  output$histogram <- renderPlotly({
    plot_ly(data = data(), x=~data()[input$col], type = "histogram")
  })

Когда я запускаю приложение, кажется, что uiOutput и renderUI не работают , Я не получаю выпадающее меню со всеми столбцами, как я ожидал. Я пробовал разные решения для renderPlotly ({}), некоторые из них включали функцию get (), и я получил разные ошибки. Иногда это было: «Неверный первый аргумент», в других случаях это было: «Объект замыкания типа не является подмножеством» и так далее. Я не могу написать все примеры, потому что я действительно не помню, что я пробовал каждый раз. Я искал ответы, но ни один из них не помог мне, потому что все они используют встроенные наборы данных, такие как iris, mtcars или trees, или у них есть более глубокая конкретная проблема c, в которую у меня нет времени.

Кроме того, когда я хочу автоматически завершить ввод $ col, он не распознается, поэтому есть еще одна потенциальная проблема?

Я предполагаю, что моя проблема связана с частью обработки данных на сервере. R, но я Я застрял.

Есть идеи? Спасибо

...