首页 > 解决方案 > 关于使用 outputUI 进行闪亮的分支处理

问题描述

我们目前正在开发闪亮的APP。当从 pickerinput 中选择选项 A 或选项 B 如果选择选项 A,则会打开一个打开文件对话框。然后选择文本文件。当我选择一个文本文件时,我希望显示文本文件的标题。

当我选择 OptionB 时,我什么都不显示,什么也不做。

我写了一个示例代码。

library(shiny)
library(shinyWidgets)
library(shinyFiles)


ui <- fluidPage(
  
  pickerInput(
    inputId = "Pi1",
    label = "SELECT!!",
    choices = list(c("OptionA"),
      c("OptionB")),
    options = list(`actions-box` = TRUE,size = 7),
    multiple = FALSE,
  ),
  
  uiOutput("button"),

  uiOutput("Message")
  
  
)

server <- function(input, output, session) {
  
  OutputUi_func(input,output)

   observeEvent(input$file, {

     volumes <- c("Documents"=Sys.getenv("HOME"))
      shinyFileChoose(input,'file', session=session,roots=volumes, filetypes=c('', 'txt'))

      if(length(input$file) <= 1) return({})

      fname <- unlist(input$file)
      fname <- c(fname[2][1])
      ftitle <- "FileName:&quot;
      fname <- paste0(ftitle,fname)

      output$filename <- renderText({
        paste0(fname)
      })
    })

}

OutputUi_func <- function(input,output){

  output$button <- renderUI({
    req(input$Pi1)
    if(input$Pi1 %in% c("OptionA")){
      shinyFilesButton('file', 'Read File', 'select file', FALSE)
    }else return(NULL)})
  

  output$Message <- renderText({
    req(input$Pi1)
    
    if(input$Pi1 %in% c("OptionA")){
      textOutput("filename")
    }else return(NULL)})
  

}
shinyApp(ui, server)

代码有问题。

・当我执行代码时,我得到一个关于“cat”的错误。

・即使您选择文本文件,也不显示文件标题。

我应该怎么做才能避免以上两个错误?

标签: rshiny

解决方案


尝试 :

library(shiny)
library(shinyWidgets)
library(shinyFiles)

ui <- fluidPage(
  pickerInput(
    inputId = "Pi1",
    label = "SELECT!!",
    choices = list(c("OptionA"),
                   c("OptionB")),
    options = list(`actions-box` = TRUE,size = 7),
    multiple = FALSE,
  ),
  uiOutput("button"),
  uiOutput("Message")
)

server <- function(input, output, session) {
  OutputUi_func(input,output)
  
  observeEvent(input$file, {
    if(input$Pi1 %in% "OptionB") return(NULL)
    volumes <- c("Documents"=Sys.getenv("HOME"))
    shinyFileChoose(input,'file', session=session,roots=volumes, filetypes=c('', 'txt'))
    if(length(input$file) <= 1) return(NULL)
    
    output$Message <- renderText({
      if(length(input$file) <= 1 || input$Pi1 %in% "OptionB") return(NULL)
      sprintf("FileName:%s", unlist(input$file$files)[[3]])  
    })
  })
}

OutputUi_func <- function(input,output){
  output$button <- renderUI({
    if(input$Pi1 %in% "OptionA")
      shinyFilesButton('file', 'Read File', 'select file', FALSE)
    else return(NULL)
  })
}
shinyApp(ui, server)

推荐阅读