我想创建一个闪亮的仪表板。仪表板的目的是在多个平台上显示多个移动应用程序的KPI。我想创建一个模板,只是将过滤后的数据提供给此模板,并在此平台上观察此应用程序的KPI。
数据在sql上,所以我更喜欢创建一个在用户选择的时间范围内提取数据并收集数据的函数,而不是维护有光泽和sql服务器之间的连接。我希望只有在日期范围发生变化且用户通过单击操作按钮进行验证时才能再次提取此功能。
这是一个非常简单的玩具示例来说明我的目标
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(sidebarMenu( dateRangeInput("daterange", "Date Range"), actionButton("do", "Do it !", width="100%"))),
dashboardBody(fluidPage(plotlyOutput("plot")))
)
data = function(start, end)
{
return(data.frame(x = c(start, end), y = runif(2)))
}
outputTemplate = function(input, output, data, instanceName)
{
output[[instanceName]] = renderPlotly({
plot_ly(data = data) %>% add_bars(x~x, y~y)
})
}
server = function(input, output){
dt = eventReactive(input$do,{
return(data(input$daterange[1], input$daterange[2]))
})
outputTemplate(input, output, dt(), "plot")
}
shinyApp(ui, server)
所以,当我点击“做它!”时按钮,我在dateRange输入上加载数据,然后在一个模板中使用此数据。
我第一次点击按钮时会出现情节,但是当我更改日期并再次点击时,情节永远不会更新。
我错过了闪亮的反应?
如果我替换为
output[["plot"]] = renderPlot({
plot(dt()$x, dt()$y, type = "b")
})
而不是outputTemplate
功能,它完美地运作
答案 0 :(得分:0)
我发现了问题,但我不明白为什么。
如果你没有将括号放在dt
上,它就可以了。
解决方案是
outputTemplate(input, output, dt, "plot")
outputTemplate = function(input, output, data, instanceName)
{
output[[instanceName]] = renderPlotly({
plot_ly(data = data()) %>% add_bars(x~x, y~y)
})
}