我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]

Posted

技术标签:

【中文标题】我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]【英文标题】:Could I get the choices of a SelectInput in the ui from a reactive function in server? (RShiny) [duplicate] 【发布时间】:2021-07-04 01:18:16 【问题描述】:

我在服务器中创建了一个反应函数来获取元素列表。这个想法是在 ui 中将列表的每个元素显示为单独的选择,就像 selectInput 在 ui 中所做的那样。

我用 mtcars 写了一个例子。

library(shiny)

ui <- fluidPage(
  
  titlePanel("Old Faithful Geyser Data"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput(inputId = options, "Select one", choices = cars())
      
    ),
    
    mainPanel(
      verbatimTextOutput("print")
    )
  )
)

server <- function(input, output) 
  
  cars <- reactive(
    data("mtcars")
    cars <- list(rownames(mtcars))
    return(cars)
  )
  
  output$print <- renderPrint(cars())
  


# Run the application 
shinyApp(ui = ui, server = server)

如果您在 ui 中删除或评论此行:selectInput(inputId = options, "Select one", choices = cars()),则该应用程序可以正常工作。输出是这样的:

[[1]]
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
 [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
 [7] "Duster 360"          "Merc 240D"           "Merc 230"           
[10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
[16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
[19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
[22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
[28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
[31] "Maserati Bora"       "Volvo 142E" 

但是,如果我尝试在 ui 中放置一个 selectInput 来显示该列表,我会收到以下错误:Error in cars (): could not find function "cars"

我不知道这是否可能,但我可以在 ui 的选择栏中显示该列表的每个元素吗?为了让用户能够选择一个选项并执行我必须编程的其他事情。

非常感谢,

问候

【问题讨论】:

您不能将响应式值放入 UI。 UI 仅在启动时运行一次。您需要使用 updateSelectInput 之类的函数在 UI 呈现后更新选项。或者你可以等待在服务器中创建 UI 使用uiOutput + renderUI 【参考方案1】:

在服务器端生成selectInput

library(shiny)

ui <- fluidPage(
  titlePanel("Old Faithful Geyser Data"),
  sidebarLayout(
    sidebarPanel(
      uiOutput('selectUI')
    ),
    mainPanel(
      verbatimTextOutput("print")
    )
  )
)

server <- function(input, output) 
  
  cars <- reactive(
    data("mtcars")
    cars <- rownames(mtcars)
    return(cars)
  )
  
  output$selectUI <- renderUI(
    selectInput(inputId = 'options', "Select one", choices = cars())  
  )
  
  output$print <- renderPrint(cars())
  


# Run the application 
shinyApp(ui = ui, server = server)

【讨论】:

非常感谢!有效。我不知道 uiOutput 和 renderUI 函数。谢谢!

以上是关于我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

更新反应材料 ui 滑块的状态/值不起作用

从全局反应应用程序中的异步函数中捕获错误

我可以通过单击我的反应应用程序中的按钮来运行 React UI 自动化测试吗?

有没有办法将状态信息从反应钩子传递到反应中的嵌套函数?

如何获得进度对话框,直到从android中的服务获得响应?

Material UI - 按钮标签中的字体大小