R闪亮的selectinput与数据库值

时间:2018-04-13 13:44:05

标签: r shiny

我正在尝试从数据库的下拉列表中获取值: -

Error in lapply(obj, function(val) { : 
  could not find function "sqlOutput"

您能告诉我代码中的错误吗?

错误讯息: -

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()
     )
   })

谢谢, 这是根据您的宝贵答案编辑的代码。 我在下拉列表中看到了列名和过滤后的值。 你能告诉我怎么解决吗?

Server.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"),

UI.R

{{1}}

2 个答案:

答案 0 :(得分:2)

问题在于,在一个闪亮的应用程序中,ui函数在server函数之前运行。从设计的角度来看这是有道理的,因为R需要存在inputs来理解server代码中的反应式表达式,但是当UI依赖于{{1}中生成的变量时会导致问题}。

最简单的解决方案是将server替换为selectInput,并将uiOutput移动到服务器代码中的selectInput函数中:

UI:

renderUI

服务器:

uiOutput('ui_assetClass')

编辑:您在列表中出现的列名称的问题可能是由于output$ui_assetClass <- renderUI({ selectInput('pick_assetclass', label ='Asset Class', choices=sqlOutput(), selected = NULL, multiple = FALSE,width="450px"), )} 返回了一个命名向量。只需使用dbGetQuery删除名称即可。这个问题涉及类似的问题:Column Names in Dropdown R Shiny SelectInput from data base

答案 1 :(得分:1)

你好,你需要一个观察或渲染,我更喜欢观察所以让我们看看:

sqlOutput<- reactive({

  sqlInput<- paste("select distinct ASSET_CLASS from DUMMY_TABLE")

  dbGetQuery(con, sqlInput)
})  

observe ({

updateSelectInput(session, "pick_assetclass",
                               choices = sqlOutput()
      )

})

希望它有所帮助。 (您需要像这样添加会话到函数服务器)

shinyServer(

  function(input, output, session) {