闪亮输出的串行触发

时间:2015-01-13 10:00:21

标签: r user-interface shiny reactive-programming

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

1 个答案:

答案 0 :(得分:2)

好的,我通过查看另一篇文章找到了答案:

我添加了以下行以使全局变量具有反应性。这非常有效。

makeReactiveBinding("myPlotInfo")