Подтвердить что ты не робот

Одновременно доступ к среде из двух сеансов R

Возможно ли это в R?

Я хотел бы запустить блестящий экземпляр с подготовленным объектом R6 (класс среды), использовать его методы - в основном, только для чтения.
Хотя в то же время, как блестящее приложение работает, я хотел бы назвать другие методы моего R6 - чтение/запись.
Shiny R session может быть хостом для моего объекта R6, в то время как второй сеанс будет вызван из запланированного R script/интерактивно из консоли R.
В настоящее время я думаю, что я могу сделать, это источник R script непосредственно из блестящего под кнопкой, но это ограничивает интерактивность.

4b9b3361

Ответ 1

В этой статье описываются правила определения для блестящих приложений и способы определения глобальных данных с различным образом упакованным кодом. Ниже приведен мой пример глобальной переменной, содержащей данные, доступные для нескольких сеансов.

Запустите это приложение, затем откройте вторую вкладку/окно в своем браузере и укажите его в том же соединении. Вы можете нажать кнопку +1 за один сеанс, чтобы увеличить общий и локальный счет. В другой сессии вы не увидите никаких изменений до тех пор, пока что-то не начнет сверкать, чтобы повторно проверить общие данные, но нажав кнопку +1, вы обновите локальный счетчик, а также инициируете обновление значения общих максимальных данных. Вы можете щелкнуть по кнопке +1 несколько раз, пока у вас не будет новый макс, а затем вернитесь к первому окну, и вы увидите, что max также видна там, как только вы нажимаете кнопку +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

Я думаю, что я сделал то, что вы хотите случайно - по существу, 2 сеанса RStudio работают параллельно? На моем Mac я просто щелкнул правой кнопкой мыши RStudio и выберите New RStudio Window. Я сделал это и на Windows, но не имею доступа к одному атму - должен быть схожим. Запуск 2 сеансов позволяет сохранить и вернуться к оригиналу при настройке второго экземпляра. С помощью двух мониторов это может быть очень удобно для ускорения времени разработки на тонких деталях;)