在R中技术上是否可行?
我想用准备好的R6对象(环境类)运行一个闪亮的实例,使用它的方法 - 大多数只读。
虽然在闪亮的应用程序运行的同时我想调用我的R6的其他方法 - 读/写
Shiny R会话可以是我的R6对象的主机,而第二个会话将从R控制台以交互方式调度。
目前我认为我可以做的是直接从闪烁的按钮中获取R脚本,但这限制了交互性。
答案 0 :(得分:1)
本文介绍了scoping rules for Shiny apps以及如何使用各种打包的代码定义全局数据。下面是我的一个全局变量示例,其中包含可供多个会话访问的数据。
运行此应用程序,然后在浏览器中打开第二个选项卡/窗口并将其指向同一连接。您可以在一个会话中单击+1按钮以增加共享的最大和本地计数。在另一个会话中,您不会看到任何更改,直到某些内容触发闪亮以重新检查共享数据,但单击+1按钮将更新本地计数,但也会触发更新共享最大数据值。您可以多次单击+1按钮,直到获得新的最大值,然后返回第一个窗口,一旦您单击+1按钮触发更新,您就可以看到最大值也可见。这适用于多个窗口。
您必须执行某事才能使会话再次检查数据以进行更新。如果没有副作用,我没有太努力地做到这一点。应该有一些方法可以根据你想要的任何触发器进行“刷新”。您甚至可以使用定时轮询来保持数据同步,例如this example与文件同步。
这个例子的一个警告是我只尝试使用本地RStudio闪亮服务器实现。我不知道它在真实的服务器上以这种方式工作。如果没有,请评论这个效果!它可能不会在shinyapps.io或通常使用任何类型的云/负载平衡上工作,因为您无法保证两个会话在一台计算机上共享应用程序实例。
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)
答案 1 :(得分:0)
我想我已经意外地完成了你想做的事情 - 基本上是2个并行运行的RStudio会话?在我的Mac上,我只需右键单击RStudio并选择New RStudio Window。我也在Windows上完成了它,但是没有访问一个atm - 应该是类似的。 运行2个会话允许您在调整第2个实例时保留并返回原始文件。使用2个显示器,这对于加快精简细节上的开发时间非常方便;)