首页 文章

Rshiny:如何在SelectInput中将renderUI输出传递给chocies参数

提问于
浏览
2

我试图在server.UI中输入renderUI输出作为selectInput中的choices =参数的输入 . 原因是,我需要使用用户选择的值作为函数的输入 . 当我传递这些参数时,我看到名称,ID,attr而不是值 . 以下是我的代码 . 感谢任何帮助 . 谢谢

server.r列出了pubmed中的可搜索字段(例如: Headers ,ALl字段,#UID等) . 这些列表需要弹出用户UI,并且当他选择他感兴趣的字段#时 . 选择需要传递给其他功能 .

此时,代码运行但不提供可搜索字段列表,无法传递任何选择 .

server.R

shinyServer(
function(input, output) {
output$Choose_Feild <- renderUI({
                      a = data.frame(entrez_db_searchable(db = "pubmed",
                      config = NULL))
                      unlist(a$FullName, use.names = FALSE)
                      }))

ui.R

shinyUI(
 fluidPage(
  titlePanel(title = "My data "),
 sidebarLayout(
  sidebarPanel(
    h3("Enter values"),
     selectInput( inputId = "var_y",label = "Field" , choices =
                uiOutput("Choose_Feild") )))

1 回答

  • 2

    你根本不能以这种方式使用 renderUI .

    由于选择不依赖于任何输入,您可以直接传递选择:

    library(shiny)
    
    shinyUI(bootstrapPage(
        selectInput(
            inputId = "var_y", label = "Field" ,
            choices = sapply(
                rentrez::entrez_db_searchable(db = input$db, config = NULL), 
                function(x) x$FullName, USE.NAMES=FALSE
            )
        )
    ))
    

    如果要动态生成选择,例如基于另一个输入,可以使用 updateSelectInput

    • server.R
    shinyServer(function(input, output, session) {
        observe({
            choices <- sapply(
                rentrez::entrez_db_searchable(db = input$db, config = NULL), 
                function(x) x$FullName, USE.NAMES=FALSE
            )
            updateSelectInput(session, "var_y", choices=choices)
        })
    })
    
    • ui.R
    shinyUI(bootstrapPage(
        selectInput(
            inputId = "db", label="DB",
            choices=c("pmc"="pmc", "pubmed"="pubmed")
        ),
        selectInput(
            inputId = "var_y", label = "Field" ,
            choices = c()
        )
    ))
    

相关问题