gpt4 book ai didi

r - 从两个R session 同时访问环境

转载 作者:行者123 更新时间:2023-12-03 11:59:52 25 4
gpt4 key购买 nike

R中在技术上可行吗?

我想使用准备好的R6对象(环境类)运行一个 Shiny 的实例,并使用其方法-大多是只读的。
在运行 Shiny 的应用程序的同时,我想调用R6的其他方法-读/写。
Shiny 的R session 可能是我的R6对象的宿主,而第二个 session 将从计划的R脚本调用/从R控制台以交互方式调用。
目前,我认为我可以做的是直接在按钮下从Shiny中获取R脚本,但这限制了交互性。

最佳答案

本文介绍了scoping rules for Shiny apps以及如何使用各种打包的代码定义全局数据。以下是我的全局变量示例,其中包含可用于多个 session 的数据。

运行此应用,然后在浏览器中打开第二个选项卡/窗口,并将其指向相同的连接。您可以在一个 session 中单击+1按钮以增加共享的最大值和本地计数。在另一个 session 中,您将不会看到任何更改,直到某些东西触发 Shiny 的光来重新检查共享数据为止,但是单击+1按钮将更新本地计数,同时还触发共享最大数据值的更新。您可以多次单击+1按钮,直到有一个新的最大值,然后返回第一个窗口,单击+1按钮触发更新后,您也可以看到最大值。这适用于多个窗口。

您必须做一些事情才能使 session 再次检查数据以进行更新。我并没有太努力地使这种情况发生而没有副作用。应该有某种方法可以根据您想要的触发器进行“刷新”。您甚至可以使用定时轮询来保持数据同步,就像this example处理文件一样。

这个示例的一个警告是,我仅尝试使用本地RStudio Shiny 服务器实现。我不知道它在真实服务器上是否可以这种方式工作。如果没有,请对此发表评论!通常,它不能在Shinyapps.io或任何类型的云/负载平衡上以这种方式工作,因为您不能保证两个 session 在一台计算机上共享一个应用程序实例。

library(shiny)

globalMax <- 0

app <- shinyApp(
ui= pageWithSidebar(
headerPanel("Shared data demo"),
sidebarPanel(
actionButton("plusButton", "+1")
),
mainPanel(
verbatimTextOutput("sharedMax")
)
),
server= function(input,output){
observe({
if (input$plusButton > globalMax) {
globalMax <<- input$plusButton
}
})
output$sharedMax <- renderText({
paste0( "Shared max value: ", globalMax, "\n",
"Local value: ", input$plusButton)
})
}
)

runApp(app)

关于r - 从两个R session 同时访问环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301246/

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