【问题标题】:Shiny conditional panel闪亮的条件面板
【发布时间】:2017-04-29 21:09:45
【问题描述】:

在我的应用中,我希望用户选择一个文件夹,然后从该文件夹中选择一个文件。

我想使用conditionalPanel(),这样用户在选择文件夹之前只会看到第一个按钮。我写了这段代码,但我收到了这个错误消息,'找不到对象'输入'',正确的方法是什么?将条件面板放在绝对面板中是否有问题?

library(shiny)
library(ggplot2)

ui <- shinyUI(fluidPage(
  titlePanel(""),
  fluidRow(
    # select input for selecting a folder
    column(2, absolutePanel(fixed = TRUE, width = '180px',
                      selectInput("pick_folder", label = '', selected='choose_a_folder',
                              choices = setNames(as.list(c('choose_a_folder', basename(setdiff(list.dirs(recursive = FALSE),'.')))), 
                                                 c('choose_a_folder', basename(setdiff(list.dirs(recursive = FALSE),'.'))))))),
    # select input for selecting a file absolutePanel then conditionalPanel
    column(2, absolutePanel(fixed = TRUE, width = '180px', 
                      conditionalPanel(condition="input.pick_folder==choose_a_folder",
                                 selectInput('pick_file', label = '', selected = 'choose_a_file',
                                           choices = setNames(as.list(c('choose_a_file', basename(setdiff(list.files(path=input$pick_folder ,recursive = FALSE),'.')))), 
                                                              c('choose a file', basename(setdiff(list.files(path=input$pick_folder ,recursive = FALSE),'.')))))))),
  ),
  fluidRow(
    #plot
    plotOutput('my_plot')

    )))

  # server
  server <- shinyServer(function(input, output) {
    output$my_plot <- renderPlot({
      dat <- read.table(file=paste(input$pick_folder, input$pick_file, sep='/'))
      # some plots over dat
    })

  })
  shinyApp(ui, server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    问题源于尝试在您的应用程序的ui 部分中动态创建文件选择选项。您应该这样做的方法是使用uiOutputrenderUIserver 部分中创建ui(您的文件选择)的动态部分

    以下代码似乎可以满足您的要求:

    library(shiny)
    library(ggplot2)
    
    ui <- shinyUI(fluidPage(
      titlePanel(""),
      fluidRow(
        # select input for selecting a folder
        column(2, absolutePanel(fixed = TRUE, width = '180px',
                                selectInput("pick_folder", label = '', selected='choose_a_folder',
                                            choices = setNames(as.list(c('choose_a_folder', basename(setdiff(list.dirs(recursive = FALSE),'.')))), 
                                                               c('choose_a_folder', basename(setdiff(list.dirs(recursive = FALSE),'.'))))))),
        # select input for selecting a file absolutePanel then conditionalPanel
        column(2, absolutePanel(fixed = TRUE, width = '180px', 
                                conditionalPanel(condition="input.pick_folder==choose_a_folder",
                                                 # Insert a dynamic bit of UI
                                                 uiOutput("fileselection") 
                                                 )
                                )
               )
      ),
      fluidRow(
        #plot
        plotOutput('my_plot')
    
      )))
    
    # server
    server <- shinyServer(function(input, output) {
      output$my_plot <- renderPlot({
        dat <- read.table(file=paste(input$pick_folder, input$pick_file, sep='/'))
        # some plots over dat
      })
    
      output$fileselection <- renderUI({  #Define the dynamic UI
        selectInput('pick_file', label = '', selected = 'choose_a_file',
                    choices = setNames(as.list(c('choose_a_file', basename(setdiff(list.files(path=input$pick_folder ,recursive = FALSE),'.')))), 
                                       c('choose a file', basename(setdiff(list.files(path=input$pick_folder ,recursive = FALSE),'.'))
                                       )
                    )
        )
      })
    
    })
    
    shinyApp(ui, server)
    

    【讨论】:

    • 谢谢!看来我需要尝试将大部分代码移到服务器上,这是过去一周第二次解决我的问题。
    • 服务器是所有思考发生的地方,所以如果你的代码正在做任何思考,它可能应该在服务器中。用户界面都是关于外观的(太肤浅了,呃!)。
    猜你喜欢
    • 2016-04-10
    • 2021-04-06
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多