如何在R shiny界面中附加示例数据集?

ffx8fchx  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(192)

我想知道如何添加一个示例数据集的地方Choose file选项在闪亮的界面.我使用的fileInput选项在ui上传用户给定的数据在我的闪亮的应用程序.但我喜欢附加一个示例数据集,这将有助于用户演示闪亮的应用程序.

ui <-navbarPage(
  tabPanel("Data",
              fileInput("file1", h3("Choose the data"), accept = c(".xlsx/xls", ".xls", ".xlsx")),
              checkboxInput("sample_data", "Load sample data"),
              fileInput("file2", h3("Choose the group information"), accept = c(".xlsx/xls", ".xls", ".xlsx")),
              checkboxInput("sample_groups", "Load sample groups"),
              actionButton("btn", "Submit"),
              helpText("Note: Upload the .xlsx or .xls file")))

server <- function(input,output, session){
  
  inFile1 <- reactive({
  if (input$sample_data){
    inFile1 <- readxl::read_excel("sample_data.xlsx")
  }
  else{
    inFile1 <- readxl::read_excel(input$file1$datapath)
  }
  })
  
  inFile2 <- reactive({
    if (input$sample_data){
      inFile2 <- readxl::read_excel("sample_groups.xlsx")
    }
    else{
      inFile2 <- readxl::read_excel(input$file2$datapath)
    }
  })

}

shinyApp(ui,server)

我已经使用了上面的代码。但是当我点击checkboxInput按钮时,示例数据集没有上传。我已经将示例数据集保存在工作目录的www文件夹中。请建议如何编辑。提前感谢您。

zf9nrax1

zf9nrax11#

这里有一个可能的解决方案。

library(shiny)

ui <- fluidPage(
  fileInput("upload", "Choose a file", accept = ".csv"),
  br(),
  actionButton(
    "takeDataset", "Or use the 'iris' dataset", class = "btn-block"
  ),
  br(),
  verbatimTextOutput("dataSummary")
)

server <- function(input, output, session) {
  
  Data <- reactiveVal(NULL)
  
  observeEvent(input[["upload"]], {
    dat <- read.csv(input[["upload"]][["datapath"]])
    Data(dat)
  })
  
  observeEvent(input[["takeDataset"]], {
    Data(iris)
  })
  
  output[["dataSummary"]] <- renderPrint({
    summary(Data())
  }) |> bindEvent(Data())
  
}

shinyApp(ui, server)
qaxu7uf2

qaxu7uf22#

下面是一个示例,您可以在应用启动时加载示例数据集:
在此之前,我们首先在根目录中创建一个my_iris.xlsx(这是您的示例数据集):与

library(openxlsx)

# for writing a data.frame or list of data.frames to an xlsx file
write.xlsx(iris, 'my_iris.xlsx')

然后在服务器部分,我们使用if/else在加载时创建占位符.xlsx:

library(shiny)
library(openxlsx) # for read.xlsx

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "Choose XLSX File", accept = ".xlsx"),
      checkboxInput("header", "Header", TRUE)
    ),
    mainPanel(
      tableOutput("contents")
    )
  )
)

server <- function(input, output) {

  output$contents <- renderTable({
    
    if(is.null(input$file1)) {
      
      dat <- read.xlsx(file.path(getwd(), "my_iris.xlsx"))
    } else {
      file <- input$file1
      ext <- tools::file_ext(file$datapath)
      
      req(file)
      validate(need(ext == "xlsx", "Please upload a xlsx file"))
      
      dat <- read.xlsx(file$datapath, header = input$header)
    }
    
    dat
    
  })
}

shinyApp(ui, server)

相关问题