Загрузка данных в Shiny для анализа

Я пытаюсь загрузить файл в Shiny, чтобы обработать его и затем просмотреть.

Я уже был в состоянии создать таблицу с документом CSV, но выходные данные myData не могут использоваться в качестве входных данных для блочного графика или любого другого графика.

SERVER

    shinyServer(function(input, output, session){
  myData <- reactive({
    inFile <- input$file1
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath, header = TRUE)
    data
  })

  output$contents <- renderTable({
    myData()

  })


}

UI

library(shiny)

write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv')

shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv',
                         'text/comma-separated-values,text/plain',
                         '.csv'))
    ),
    mainPanel(
      tableOutput('contents'),
      plotOutput('distPlot')
    )
  )
)
)

Как я могу использовать данные из загруженного мной файла из функции myData?

1 ответ

Решение

Вы должны использовать функции renderDataTable и dataTableOutput из пакета DT для рендеринга ваших таблиц. Ваш код работает нормально, как это:

library(shiny)
library(DT)

server <- function(input, output, session){
  myData <- reactive({
    inFile <- input$file1
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath, header = TRUE)
    data
  })

  output$contents <- DT::renderDataTable({
    DT::datatable(myData())       
  })
}

write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv')

ui<- shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv',
                         'text/comma-separated-values,text/plain',
                         '.csv'))
    ),
    mainPanel(
      DT::dataTableOutput('contents'),
      plotOutput('distPlot')
    )
  )
)
)

shinyApp(ui,server)

Также см. Статью ниже:

Также возможно, чтобы пользователь загружал CSV-файлы в ваше приложение Shiny. Код ниже показывает небольшой пример того, как этого можно достичь. Он также включает в себя вход RadioButton, чтобы пользователь мог интерактивно выбрать разделитель, который будет использоваться.

library(shiny)
library(DT)

# Define UI
ui <- shinyUI(fluidPage(

  fileInput('target_upload', 'Choose file to upload',
            accept = c(
              'text/csv',
              'text/comma-separated-values',
              '.csv'
            )),
  radioButtons("separator","Separator: ",choices = c(";",",",":"), selected=";",inline=TRUE),
  DT::dataTableOutput("sample_table")
)
)

# Define server logic
server <- shinyServer(function(input, output) {

  df_products_upload <- reactive({
    inFile <- input$target_upload
    if (is.null(inFile))
      return(NULL)
    df <- read.csv(inFile$datapath, header = TRUE,sep = input$separator)
    return(df)
  })

  output$sample_table<- DT::renderDataTable({
    df <- df_products_upload()
    DT::datatable(df)
  })

}
)

# Run the application 
shinyApp(ui = ui, server = server)
Другие вопросы по тегам