在 Shiny R 中上传文件前显示数据

Display data before file upload in Shiny R

我正在创建一个简单的 Shiny 应用程序,允许用户上传 csv 文件并使用上传的数据绘制各种图表。我想将一些数据预加载到应用程序中,以便没有任何数据的用户仍然可以绘制图形。

现在我只是尝试打印上传文件或示例数据的 table。

我编写了以下代码,但它不起作用:

server.R

 library(shiny)
 library(ggplot2)

 shinyServer(function(input, output) {
   output$contents <- reactive({

    inFile <- input$file1

    if (!is.null(inFile)){
      renderTable({
        read.csv(inFile$datapath, header=input$header, sep=input$sep, 
             quote=input$quote)})
    }
    else{
      renderDataTable({
          diamonds[, input$show_vars, drop = FALSE]})
    }
   })
 })

ui.R

library(shiny)

shinyUI(fluidPage(
  titlePanel("Test"),
   sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept = c(
                  '.csv',
                  '.tsv'
                 )
       ),
       tags$hr(),
       checkboxInput('header', 'Header', TRUE),
       radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                     ','),
       radioButtons('quote', 'Quote',
                   c(None='',
                     'Double Quote'='"',
                     'Single Quote'="'"),
                    '"')
     ),
    mainPanel(
              tabsetPanel(type = "tabs", 
                  tabPanel("Table", tableOutput("contents"))
              )
             )
   )
))

我猜我没有正确分配给 output$contents,但我真的不知道如何修复它。

您不能从 reactive() 内部调用 renderTablerenderDataTable。换成这样:

 shinyServer(function(input, output) {
   tableData <- reactive({

     inFile <- input$file1

     if (!is.null(inFile)){
       read.csv(inFile$datapath, header=input$header, sep=input$sep, 
               quote=input$quote)
     }
     else {
       diamonds[, input$show_vars, drop = FALSE]
     }
   })

   output$contents <- renderTable({
     tableData()
   })
 })