【发布时间】:2017-05-10 01:22:49
【问题描述】:
我想构建一个 R Shiny 应用程序,它能够将信息从一个正在运行的实例传递到其他可能的运行实例。到目前为止,我没有发现任何可以帮助我解决这个问题的方法,我希望能做对,而不是求助于全局变量和/或写入文件等(我在下面的示例中使用了全局变量,我知道这是一个不好的做法;而且我怀疑写入文件也不是一个好的做法)。
例如,假设我的 App.R 在服务器上运行,Tim、Jack 和 John 将其打开。当 Jack 和 John 也同时使用应用程序并按下下例所示的按钮时,如何让 Tim 看到下面的内容?
App.R:
library(shiny)
# Somehow interactively visible variable? (I know global variables are bad, I wouldn't want to use such)
txt <<- ""
shinyApp(
ui = fluidPage(
textInput("name", "User name", value="USERNAME"),
actionButton("button", "Button"),
htmlOutput("text")
),
server = function(input, output, session){
a <- eventReactive(input$button, {
txt <<- paste(txt, "Button pressed by", input$name, "at", Sys.time(), "<br>")
txt
})
output$text <- reactive({
HTML(a())
})
}
)
在各自的用户按下多个按钮后所需的输出示例,这些用户都在其浏览器中运行了一个应用程序实例(都选择了唯一的 input$name,但显然唯一的会话 id 会更好):
任何见解将不胜感激,谢谢!
【问题讨论】:
-
我不认为你可以让会话与每个孩子交互,但我已经构建了一些将事件写入数据库的应用程序。应用程序中的某些操作将调用查询并拉取其他并发用户所做的任何新更改。
-
这似乎是一个可能的解决方案,尽管我希望有一些直接交互的方式。我想我可能还必须构建一些基于 SQL 的解决方案来传递信息,这绝对是一种方法,即使超出了 R Shiny。需要考虑一下,谢谢!
标签: r interactive shiny shiny-reactivity