R 串行触发系统中的输出

R 串行触发系统中的输出,r,user-interface,shiny,reactive-programming,R,User Interface,Shiny,Reactive Programming,考虑一个完整的应用程序。具有多个导航栏、选项卡集和绘图 我需要构建一个单独的底部信息窗格,其中包含与每个渲染图相关的一些信息。此信息取决于打印图表中的实际数据 这就是我想做的 步骤1:用户输入一个输入。 步骤2:更新相关绘图 步骤3:计算底部窗格所需的相关数据并存储在全局变量中) 步骤4:步骤3完成后,我希望它触发底部窗格的更新 我试图使底部窗格和绘图对用户输入作出反应。 但这可能无法保证绘图渲染有机会更新“信息数据”窗格 任何提示都将不胜感激 谢谢 这里是最简单的例子。注意-我知道我可以使集群

考虑一个完整的应用程序。具有多个导航栏、选项卡集和绘图

我需要构建一个单独的底部信息窗格,其中包含与每个渲染图相关的一些信息。此信息取决于打印图表中的实际数据

这就是我想做的 步骤1:用户输入一个输入。 步骤2:更新相关绘图 步骤3:计算底部窗格所需的相关数据并存储在全局变量中) 步骤4:步骤3完成后,我希望它触发底部窗格的更新

我试图使底部窗格和绘图对用户输入作出反应。 但这可能无法保证绘图渲染有机会更新“信息数据”窗格

任何提示都将不胜感激

谢谢

这里是最简单的例子。注意-我知道我可以使集群成为一个反应性的“对象”。但关键是myPlotInfo对象在各种函数中进行了深层次的更新。因此,它不容易在外部计算


服务器.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    
})

})
))


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

plotFunction好的,我在另一篇帖子中找到了答案:

我在下面添加了一行,使全局变量成为被动变量。这很有效

makeReactiveBinding("myPlotInfo")

请提供一个最小的可重复性示例:您是在寻找有关kmeans的“集群”还是仅用于计算的表?实际上,我的目标是能够更新全局变量myPlotInfo。在绘图函数中。这需要反过来触发输出的重绘:输出$MyTable您可以通过Yeah将其写入全局。我做到了。我想让它触发输出的重画:output$myTable谢谢
makeReactiveBinding("myPlotInfo")