Блестящий вход R-Select не работает

Я пытаюсь создать приложение на R с помощью Shiny (впервые использую).

Шаг 1: Считайте данные CSV. Шаг 2: Гистограмма для каждой переменной. Шаг 3: дальнейший анализ.

Я могу читать данные csv, но не могу отображать имена столбцов данных в selectinput.

Код выполняется, но отображение имен переменных не работает. Мой код:

library(shiny)
ui<-navbarPage("Model Developement by Subhasish",
           tabPanel("Data Import",sidebarLayout(sidebarPanel( fileInput("file","Upload your CSV",multiple = FALSE),
                                                              tags$hr(),
                                                              h5(helpText("Select the read.table parameters below")),
                                                              checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
                                                              checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
                                                              radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',')
           ),
           mainPanel(uiOutput("tb1"))
           ) ),
           tabPanel("Histogram",sidebarLayout(sidebarPanel(
             selectInput("headers","Select variable to view Histogram",choices =as.list(names(data)),multiple = FALSE)),mainPanel("mainpanel"))),
           tabPanel("More")
)
server<-function(input,output) { data <- reactive({
  file1 <- input$file
  if(is.null(file1)){return()} 
  read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)

})  
output$table <- renderTable({
  if(is.null(data())){return ()}
  data()
})
output$tb1 <- renderUI({
  tableOutput("table")
})
}
shinyApp(ui=ui,server=server)

Заранее благодарим за помощь.


person Subhasish1315    schedule 06.12.2016    source источник
comment
В основном проблема заключается в том, что вы пытаетесь получить доступ к именам столбцов файла data из ui, но вы не можете этого сделать, если не передадите имена из server. У вас есть 2 варианта: 1) создать selectInput в пользовательском интерфейсе, а затем использовать updateSeletctInput на сервере, 2) создать selectInput на сервере, а затем передать его, используя renderUI и uiOutput.   -  person John Paul    schedule 06.12.2016
comment
Спасибо @JhonPaul за руководство. Я запомню это и буду использовать в будущем. В этом случае лучше выглядит 2-й вариант, так как он более динамичный.   -  person Subhasish1315    schedule 07.12.2016


Ответы (1)


Здесь я добавил пример того, как вы можете действовать. Я тестировал его с помощью своего фиктивного файла .csv, так что он должен работать. Я также добавил несколько тестовых примеров для гистограммы, чтобы вы не печатали ошибки.

Я добавил следующие изменения

  1. Я использовал renderUI для создания selectInput названных заголовков
  2. Вывод таблицы лучше всего визуализировать напрямую, используя tableOutput("table")
  3. Я добавил график гистограммы, как вы хотели

Пример:

library(shiny)
ui<-navbarPage("Model Developement by Subhasish",
               tabPanel("Data Import",sidebarLayout(sidebarPanel( fileInput("file","Upload your CSV",multiple = FALSE),
                                                                  tags$hr(),
                                                                  h5(helpText("Select the read.table parameters below")),
                                                                  checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
                                                                  checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
                                                                  radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',')
               ),
               mainPanel(tableOutput("table")))),
               tabPanel("Histogram",sidebarLayout(sidebarPanel(
                 uiOutput("ui1")),
                 mainPanel(plotOutput("myhist")))),
               tabPanel("More")
)
server<-function(input,output) { 

  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
  }) 

  output$table <- renderTable({
    if(is.null(data())){return ()}
    data()
  })
  output$ui1 <- renderUI({
    selectInput("headers","Select variable to view Histogram",choices =as.list(names(data())),multiple = FALSE)
  })

  output$myhist <- renderPlot({
    histdata <- suppressWarnings(as.numeric((data()[,names(data()) %in% input$headers])))
    histdata <- histdata[!is.na(histdata)]
    if(length(histdata) == 0){
      return()
    }
    hist(histdata,breaks=10)
    box();grid() 
  })
}
shinyApp(ui=ui,server=server)

введите описание изображения здесь

person Pork Chop    schedule 06.12.2016
comment
Спасибо @Pork Chop за ответ. Я буду использовать вас в своей следующей работе. Поскольку я новичок в сиянии. Можете ли вы объяснить мне, почему вы использовали box (), grid (); ?? - person Subhasish1315; 07.12.2016
comment
box(),grid(); просто добавил рамку и сетку к сюжету, вот и все, просто чтобы было красиво - person Pork Chop; 07.12.2016
comment
Спасибо @pork chop ... На самом деле я новичок в R, поэтому никогда не использовал его ... счастлив и рад узнать что-то новое - person Subhasish1315; 08.12.2016