【问题标题】:Converting Outputs to Inputs in R Shiny在 R Shiny 中将输出转换为输入
【发布时间】:2021-07-25 05:31:10
【问题描述】:

我试图根据用户选择的日期获取某个位置的文件列表,并将该列表作为选项(可能带有复选框)提供以选择一个文件并将其显示为 R Shiny 中的输出。我可以到达获得列表的地步,但无法将其提供给用户以供选择并显示内容。任何帮助表示赞赏。

ui <- fluidPage(
        titlePanel("Select the execution date"),
        dateInput("ME_DATE",label=h3("Execution Date Input"), value="2020-05-29"),
        hr(),
        fluidRow(column(3,verbatimTextOutput("Output_path"))),
        h4("Files in Above Location"),
        hr(),
        verbatimTextOutput("Output_files")

)

server <- function(input, output) {

        # Main Directory for Source Files
        Copied_Source_Files_DIR <- "U:/Source Files/"
        
        Copied_Source_Files_loc <- reactive({
                                        
        year_N_ME_DATE <- format(input$ME_DATE,"%Y")
        month_N_ME_DATE <- format(input$ME_DATE,"%m")
        month_T_ME_DATE <- months(input$ME_DATE)

        file.path(paste(Copied_Source_Files_DIR,year_N_ME_DATE,"/",month_N_ME_DATE,". ",month_T_ME_DATE,"/",sep=""))
        })
        
        output$Output_path <- renderPrint({ Copied_Source_Files_loc() })
        
        # files
        output$Output_files <- renderPrint(list.files(Copied_Source_Files_loc()))
        
}

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    updateCheckboxInput' would be a way to deal with it (as r2evans suggested). This solution uses a uiOutput` 允许您在服务器端生成 UI 元素并将其发送到 UI。它不需要反应式表达式作为输入和输出之间的步骤。

    ui <- fluidPage(
      titlePanel("Select the execution date"),
      dateInput("ME_DATE",label=h3("Execution Date Input"), value="2020-05-29"),
      hr(),
      fluidRow(column(3,verbatimTextOutput("Output_path"))),
      h4("Files in Above Location"),
      hr(),
      uiOutput("Output_files")
    )
    
    server <- function(input, output) {
      
      # Main Directory for Source Files
      Copied_Source_Files_DIR <- "./"
      
      Copied_Source_Files_loc <- reactive({
        
        year_N_ME_DATE  <- format(input$ME_DATE,"%Y")
        month_N_ME_DATE <- format(input$ME_DATE,"%m")
        month_T_ME_DATE <- months(input$ME_DATE)
        
        file.path(paste(Copied_Source_Files_DIR,year_N_ME_DATE,"/",month_N_ME_DATE,". ",month_T_ME_DATE,"/",sep=""))
      })
      
      output$Output_path <- renderPrint({ Copied_Source_Files_loc() })
      
      # files
      output$Output_files <- renderUI({
        checkboxGroupInput("File_Selector", 
                           "Select a file", 
                           choices = list.files(Copied_Source_Files_loc()))
      })
      
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 感谢您提供非常有帮助的答案!
    【解决方案2】:

    不要将output$ 视为可能的中间步骤,它在某种意义上始终是终结者。最好将数据单独保存为reactive(.) 数据,并在多个地方使用。

      filelist <- reactive({ list.files(Copied_Source_Files_loc()) })
      output$Output_files <- renderPrint(filelist())
    

    【讨论】:

    • 谢谢。如何将此列表提供给用户进行选择,我在 ui 中尝试了 "checkboxInput("filelist", "Output files")",但没有成功。
    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2021-07-23
    • 2021-09-11
    • 2018-09-30
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多