Вопрос:

r блестящий создать выпадающий из столбца данных в CSV

r csv shiny

2089 просмотра

1 ответ

68 Репутация автора

Мое выпадающее меню сейчас заполнено именами столбцов. Вместо этого я хочу создать выпадающий список, который просто использует все в первом столбце в качестве параметров. Кто-нибудь может помочь с моей функцией вывода $ toCol?

server.R:

filedata <- reactive({
  infile <- input$datafile
  if (is.null(infile)) {
  # User has not uploaded a file yet
   return(NULL)
  }
  read.csv(infile$datapath, header = TRUE)
})

output$toCol <- renderUI({
  df <-filedata()
  if (is.null(df)) return(NULL)

  items=names(df)
  names(items)=items
  selectInput("species-dropdown", "Species:",items)
})

ui.R

fileInput('datafile', 'Choose CSV file', accept=c('text/csv', 'text/comma-separated-values,text/plain')),
uiOutput("toCol")
Автор: joe-gz Источник Размещён: 22.08.2016 08:42

Ответы (1)


2 плюса

3972 Репутация автора

Решение

Прежде всего, вместо if (...) return(NULL)использования, reqкоторое вызовет «тихое» исключение, если оно input$datafileравно NULL, и это предотвратит распространение ошибок. Это упростит ваш код, и это хорошая практика для его использования. Смотрите также validateи need.

Ответ на ваш вопрос так же прост:

    df <- filedata()
    # as.character: to get names of levels and not a numbers as choices in case of factors
    items <- as.character(df[[1]])
    selectInput("species-dropdown", "Species:", items)

Я также добавил небольшой интерфейс для загрузки файлов.


Полный пример:

library(shiny)
rm(ui)
rm(server)

server <- function(input, output) { 

  filedata <- reactive({
    infile <- input$datafile
    # require that infile is not NULL (?req)
    # it will prevent propagating errors 
    req(infile) 

    # read.csv(infile$datapath, header = TRUE)
    iris
  })

  output$toCol <- renderUI({
    df <- filedata()

    # as.character: to get names of levels and not a numbers as choices in case of factors
    items <- as.character(df[[1]])

    selectInput("species-dropdown", "Species:", items)
  })

}

ui <- fluidPage(
  # http://shiny.rstudio.com/gallery/file-upload.html
  sidebarLayout(
    sidebarPanel(
      fileInput('datafile', 'Choose CSV File',
                accept=c('text/csv', 
                         'text/comma-separated-values,text/plain', 
                         '.csv')),
      tags$hr(),
      checkboxInput('header', 'Header', TRUE),
      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   ','),
      radioButtons('quote', 'Quote',
                   c(None='',
                     'Double Quote'='"',
                     'Single Quote'="'"),
                   '"')
    ),
    mainPanel(
      uiOutput("toCol")
    )
  )
)

shinyApp(ui, server)
Автор: Michal Majka Размещён: 22.08.2016 09:05
Вопросы из категории :
32x32