簡體   English   中英

從兩個R會話同時訪問環境

[英]Simultaneously access environment from two R sessions

R在技術上是否可行?

我想用准備好的R6對象(環境類)運行一個閃亮的實例,使用它的方法 - 大多數只讀。
雖然在運行閃亮的應用程序的同時我想調用我的R6的其他方法 - 讀/寫。
Shiny R會話可以是我的R6對象的主機,而第二個會話將從R控制台以預定的R腳本/交互方式調用。
目前我認為我可以做的是直接從閃爍的按鈕中獲取R腳本,但這限制了交互性。

本文介紹了Shiny應用程序范圍規則以及如何使用各種打包的代碼定義全局數據。 下面是我保存多個會話可訪問數據的全局變量的示例。

運行此應用程序,然后在瀏覽器中打開第二個選項卡/窗口並將其指向同一連接。 您可以在一個會話中單擊+1按鈕以增加共享的最大和本地計數。 在另一個會話中,您不會看到任何更改,直到某些內容觸發閃亮以重新檢查共享數據,但單擊+1按鈕將更新本地計數,但也會觸發更新共享最大數據值。 您可以多次單擊+1按鈕,直到獲得新的最大值,然后返回第一個窗口,一旦您單擊+1按鈕觸發更新,您就可以看到最大值也可見。 這適用於多個窗口。

您必須做一些事情才能使會話再次檢查數據以進行更新。 如果沒有副作用,我沒有太努力地做到這一點。 應該有一些方法可以根據你想要的任何觸發器進行“刷新”。 您甚至可以使用定時輪詢來保持數據同步,就像此示例對文件一樣。

這個例子的一個警告是我只嘗試使用本地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)

我想我已經意外地做了你想做的事 - 基本上是2個並行運行的RStudio會話? 在我的Mac上,我只需右鍵單擊RStudio並選擇New RStudio Window。 我也在Windows上完成了它,但是沒有訪問一個atm - 應該是類似的。 運行2個會話允許您在調整第2個實例時保留並返回原始文件。 有2個顯示器,這對於加快精簡細節的開發時間非常方便;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM