【问题标题】:Column Names in Dropdown R Shiny SelectInput from data base来自数据库的下拉 R Shiny SelectInput 中的列名
【发布时间】:2018-08-07 01:26:46
【问题描述】:

我正在使用以下代码使用数据库值填充下拉列表:-

服务器.R

sqlOutputAssetClass <- reactive({
    sqlInputAssetClass<- paste("select distinct ASSET_CLASS from DUMMY_TABLE",sep="")
    dbGetQuery(con, sqlInputAssetClass)
   })

sqlOutputFeedSrcSys <- eventReactive(input$pick_assetclass, {
    sqlInputFeedSrcSys<- paste("select distinct FEED_SRC_SYS from DUMMY_TABLE where ASSET_CLASS=",
                               "'",
                               input$pick_assetclass,"'",sep="")
    dbGetQuery(con,sqlInputFeedSrcSys)
    })        

observe ({
    updateSelectInput(session,"pick_assetclass","ASSET CLASS",
                      choices = sqlOutputAssetClass())
   })

observe ({
    updateSelectInput(session,"pick_feedsrcsys","FEED SOURCE SYSTEM",
                      choices = sqlOutputFeedSrcSys())
   })

UI.R

selectInput('pick_assetclass',label ='Asset Class',
            choices=NULL,selected = NULL, multiple = FALSE,width="450px"),

selectInput('pick_feedsrcsys',label ='Feed Src Sys',
            choices=NULL,selected = NULL, multiple = FALSE,width="450px"),

我看到下拉列表中填充了值以及数据库表中的列名。 另一个奇怪的事情是,当下拉列表中只有一个值时,该值不会显示,但会显示列名。

请告诉我如何解决这些问题?

谢谢,

【问题讨论】:

  • 只需将sqlOutputFeedSrcSys() 转换为包含您要显示的选项的未命名字符向量。您可以在observe 中使用browser() 来查看需要进行哪些转换。
  • 谢谢..你能分享一个代码sn-p吗?

标签: r shiny


【解决方案1】:

来自?selectInput

choices: ... 这也可以是一个命名列表,其元素是(命名或未命名)列表或向量。如果是这种情况,最外面的名称将用作相应子列表中元素的“optgroup”标签。这允许您对类似的选择进行分组和标记。 ...

因此,在您的情况下,dbGetQuery 可能会返回一个命名向量。只需通过unname 运行它以在从sqlOutputAssetClass 返回之前删除这些名称,并且类别名称应该消失:

sqlOutputAssetClass <- reactive({
    sqlInputAssetClass<- paste("select distinct ASSET_CLASS from DUMMY_TABLE",sep="")
    unname(dbGetQuery(con, sqlInputAssetClass))
   })

【讨论】:

  • 嗨,我尝试了这种方法。我在下拉列表中得到 c("FX", "CS", "AT", "FUTURES")。 '观察 ({ updateSelectInput(session,"pick_assetclass","ASSET CLASS", 选择 = as.character(sqlOutputAssetClass()),selected = NULL ) })'
  • 您为什么在上述评论的未格式化代码中将as.character 放在对sqlOutputAssetClass 的调用旁边?我认为这可能是你的问题
  • 如果 as.character 不存在,我会收到一个错误:- 警告: 中的错误:必须命名“选择”中的所有子列表。
  • 你看sqlOutputAssetClass的输出了吗?它在返回什么?您希望它返回一个未命名的字符向量。
  • 可以这样解决 - 观察 ({ updateSelectInput(session,"pick_assetclass","ASSET CLASS",choices = unique(as.character(unlist(sqlOutputAssetClass()))),selected = NULL ) }) 现在可以正常工作了。
【解决方案2】:

这不是答案,而是扩展评论。

为了查看传递给updateSelectInput 的值,您可以在更新之前调用browser(),就像这样

observe ({
  choices = sqlOutputAssetClass()
  browser()
  updateSelectInput(session,"pick_assetclass","ASSET CLASS",
                   choices = sqlOutputAssetClass()
  )
})

这将打开一个交互式控制台,您可以在其中打印您的选择以及所有其他输入/反应,并查看需要进行哪些更改才能将其转换为没有标签、属性或名称的“裸”字符字符串。此控制台将阻止控制台,直到您单击“下一步”,并且在运行 observe 块时重新打开。

你最终想要传递给更新函数的对象应该是这样的

choices <- c("FX", "CS", "AT", "FUTURES")

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 2019-07-13
    • 2021-02-08
    • 2016-02-04
    • 2018-07-10
    • 2020-01-09
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多