r - 单个运行的 R Shiny 应用程序的多个 session 之间的交互

标签 r interactive shiny shiny-reactivity

我想构建一个 R Shiny 应用程序,它能够将信息从一个正在运行的实例传递到其他可能的运行实例。到目前为止,我没有发现任何可以帮助我解决这个问题的方法,我希望能做对,而不是诉诸全局变量和/或写入文件等(我在下面的示例中使用了全局变量,我知道这是一个不好的做法;我怀疑写入文件也不是一个好习惯)。

例如,假设我的 App.R 在服务器上运行,并且 Tim、Jack 和 John 将其打开。当 jack 和约翰同时使用该应用程序并按下以下示例中所示的按钮时,如何让蒂姆看到以下内容?

应用程序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,但显然唯一的 session ID 会更好):

Example user case

任何见解将不胜感激,谢谢!

最佳答案

我已经在一个 Shiny 的服务器实例上测试了你的代码,它按预期工作:即我得到了一个类似于你要求的打印输出。

我有点困惑:你到底在找什么?

无论如何,作为一般性评论,我不同意使用 <<-是错的还是那个global variables (通常或在 Shiny 的应用程序中)很糟糕。

他们有自己的位置,实际上一个典型的用例是跨 session /用户传递状态。

另一种方法是使用 shiny reactiveValues如:

 values <- reactiveValues()
 values$lognames <- ''
 ...
 ui <- (...)

 server <- function(input, output, session){

 a <- eventReactive(input$button, {
 values$lognames <- paste(values$lognames, "Button pressed by", input$name, "at", Sys.time(), "<br>")
 values$lognames
 })
...
 }

但作为一般注意事项,这种类型的设计虽然可能,但最终可能会为应用程序带来状态,迅速增加其复杂性,并与 reactive 的简单性背道而驰。范例。

我强烈的建议是在这条道路上的每一步之前都要认真考虑。我有实现 Shiny 应用程序的经验,这些应用程序随着这些应用程序的激增而迅速升级 states .我必须跟踪导致应用程序脆弱、难以调试的所有状态变化。

关于r - 单个运行的 R Shiny 应用程序的多个 session 之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316659/

相关文章:

r - 组连续工作日日期(不包括周末和节假日)

r - R中的离散化

javascript - 如何让 map 区域背景颜色改变?

r - 如何为数据表中的 'sparkline' 对象创建弹出窗口?

R Shiny 的 react 文件列表

r - 使用 tidy 评估选择命名的 [list] 元素

r - 如何使用 API 的 stackr 库获取徽章信息?

r - 无法隐藏列并在 Shiny DT 中设置行名 = FALSE

python - 如何将语句写入两行?

R多y轴交互图