【问题标题】:How to use R Shiny reactive server objects in UI input widgets如何在 UI 输入小部件中使用 R Shiny 反应式服务器对象
【发布时间】:2023-04-10 22:14:01
【问题描述】:

我正在尝试拥有一个 Shiny 应用程序,它连接到数据库,但用户可以修改 IP 等。

简而言之,我只是想知道,是否有可能拥有一个闪亮的应用程序,其中来自重新激活服务器部件的对象包含在 UI 选择输入中。

像这样:

library(shiny)
    
    ui <- fluidPage(
    
  selectizeInput(inputId = 'inSelect',
                 label = "countries",
                 choices = getTable(),
                 multiple = TRUE,
                 options = list(maxItems = 4, 
                                placeholder = 'select up to 4 countries')
                 )
 )

server <- function(input, output) {
 
  getTable <- reactive({
    
    country <- data.frame(name=c("Germany","France","Japan"),
                          code=c("DEU","FRA","JPN"))
    countryN <- country$code
    names(countryN) <- country$name
  })
} 

shinyApp(ui = ui, server = server)

当它工作时,它应该是这样的:

我知道,我可以通过在 UI 之前构建 DF 来实现这种效果,但我真正的问题要复杂一些:

我希望用户输入 IP、用户名、密码和数据库名称,以连接到数据库。 单击按钮后,应建立连接并且 df.国家应该被拉出数据库,而不是建造。 我认为,我必须在(反应性)服务器部分中执行此部分,因为我在 DB 连接中使用 Input$x。

我希望,我的愿景是可能的,你们可以帮助我, 谢谢。

【问题讨论】:

    标签: r input shiny reactive


    【解决方案1】:

    您可以使用updateSelectInput() 从应用程序的服务器端更新选择输入,更多信息可在此处找到:https://shiny.rstudio.com/reference/shiny/1.2.0/updateSelectInput.html

    在您的具体示例中,您可以通过以下方式实现:

    library(shiny)
    
    ui <- fluidPage(
        
        selectizeInput(inputId = 'inSelect',
                       label = "countries",
                       choices = NA,
                       multiple = TRUE,
                       options = list(maxItems = 4, 
                                      placeholder = 'select up to 4 countries')
        )
    )
    
    server <- function(input, output,session) {
        
        getTable <- reactive({
            
            country <- data.frame(name=c("Germany","France","Japan"),
                                  code=c("DEU","FRA","JPN"))
            countryN <- country$code
            names(countryN) <- country$name
            
            return(country)
        })
        
        observe({updateSelectInput(session, inputId="inSelect", label = NULL, choices = getTable()$name,
                          selected = NULL)})
        
        
    } 
    
    shinyApp(ui = ui, server = server)
    

    通过将参数session 添加到服务器函数,然后使用updateSelectInput() 函数,在我使用observe() 的示例中,它必须包含在反应式表达式中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2016-08-25
      • 2020-06-18
      • 2021-09-02
      • 2020-06-27
      • 2017-01-30
      • 2021-04-20
      • 1970-01-01
      相关资源
      最近更新 更多