在Shiny中考虑一个完整的应用程序。使用多个导航栏,制表符和图表。
我需要构建的是一个单独的底部信息窗格,其中包含与每个渲染图相关的一些信息。此信息取决于绘制图表中的实际数据。
所以这就是我想要做的 第1步:用户输入输入。 第2步:更新相关图 第3步:计算底部窗格所需的相关数据并存储在全局变量中) Step4:一旦step3完成,我希望它触发底层窗格的更新
我尝试使底部窗格和图表对用户输入有反应。 但这可能无法保证绘图渲染有机会更新信息窗格的数据。
任何提示都将不胜感激。
感谢
这里是最小的例子。注意 - 我知道我可以使集群成为一个被动的“对象”。但这笔交易是myPlotInfo对象在各种函数内部更新。因此,在外面不容易计算。
Server.R
source(util.R)
library(shiny)
myPlotInfo<-iris #setting inital value
shinyServer(function(input, output, session) {
output$plot1 <- renderPlot({
plotFunction(iris,input$xcol, input$ycol,input$clusters )
})
output$myTable<-renderDataTable({
myPlotInfo
})
})
ui.R
shinyUI(pageWithSidebar(
headerPanel('Iris k-means clustering'),
sidebarPanel(
selectInput('xcol', 'X Variable', names(iris)),
selectInput('ycol', 'Y Variable', names(iris),
selected=names(iris)[[2]]),
numericInput('clusters', 'Cluster count', 3,
min = 1, max = 9)
),
mainPanel(
plotOutput('plot1'),
dataTableOutput("myTable")
)
))
util.R
plotFunction<-function(dat,x,y,n){
par(mar = c(5.1, 4.1, 0, 1))
selectedData<-dat[, c(x, y)]
clusters <- kmeans(selectedData,n)
myPlotInfo<<-selectedData
plot(selectedData,
col = clusters$cluster,
pch = 20, cex = 3)
points(clusters$centers, pch = 4, cex = 4, lwd = 4)
}
答案 0 :(得分:2)
好的,我通过查看另一篇文章找到了答案:
我添加了以下行以使全局变量具有反应性。这非常有效。
makeReactiveBinding("myPlotInfo")