gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:03:09 27 4
gpt4 key购买 nike

我想构建一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com