21

Rで技術的に可能ですか?

準備された R6 オブジェクト (環境クラス) で光沢のあるインスタンスを実行し、そのメソッドを使用したいと思います - ほとんどが読み取り専用です。
光沢のあるアプリの実行と同時に、R6 の他のメソッド (読み取り/書き込み) を呼び出したいと思います。
Shiny R セッションは R6 オブジェクトのホストになる可能性があり、2 番目のセッションはスケジュールされた R スクリプトから呼び出されるか、R コンソールから対話的に呼び出されます。
現在私ができると思うことは、ボタンの下の光沢のあるものから直接 R スクリプトを入手することですが、これは対話性を制限します。

4

2 に答える 2

1

この記事では、Shiny アプリのスコープ ルールと、さまざまにパッケージ化されたコードを使用してグローバル データを定義する方法について説明します。以下は、複数のセッションにアクセス可能なデータを保持するグローバル変数の例です。

このアプリを実行し、ブラウザで 2 番目のタブ/ウィンドウを開き、同じ接続をポイントします。1 つのセッションで +1 ボタンをクリックして、共有の最大数とローカル数を増やすことができます。他のセッションでは、何かが光沢をトリガーして共有データを再チェックするまで変化は見られませんが、そこで +1 ボタンをクリックすると、ローカル カウントが更新されますが、共有最大データ値の更新もトリガーされます。新しい最大値が得られるまで +1 ボタンを数回クリックし、最初のウィンドウに戻ると、+1 ボタンをクリックして更新をトリガーすると、そこにも最大値が表示されていることがわかります。これは、複数のウィンドウで機能します。

セッションでデータを再度チェックして更新するには、何かを行う必要があります。副作用なしでこれを実現するために、私は一生懸命働きませんでした. 必要なトリガーに基づいて「更新」を行う方法が必要です。この例がファイルで行うように、時限ポーリングを使用してデータの同期を維持することもできます。

この例の 1 つの注意点は、ローカルの RStudio の光沢のあるサーバー実装でしか試していないことです。実際のサーバーでこのように機能するかどうかはわかりません。そうでない場合は、その旨コメントしてください!2 つのセッションが 1 つのマシンでアプリ インスタンスを共有することを保証できないため、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)
于 2016-04-03T20:45:19.560 に答える