我正在尝试从数据库的下拉列表中获取值: -
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}}
答案 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) {