[解決済み] R Shiny: reactiveValuesとreactiveの比較
質問
この質問は
この質問
. この2つは同じ機能を生成することができますが、実装は若干異なっています。大きな違いのひとつは
reactiveValue
のように複数の値を持つことができるコンテナであることです。
input$
. で
光沢のあるドキュメント
の機能は、通常
reactive()
で実装されていますが、ほとんどの場合、私は
reactiveValues()
の方が便利です。何か不都合があるのでしょうか?この2つの間には、私が知らないような大きな違いがあるのでしょうか? この2つのコードスニペットは同等ですか?
同じ のコード例 を使って実装されています。
-
反応式。
library(shiny) ui <- fluidPage( shiny::numericInput(inputId = 'n',label = 'n',value = 2), shiny::textOutput('nthValue'), shiny::textOutput('nthValueInv') ) fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2)) server<-shinyServer(function(input, output, session) { currentFib <- reactive({ fib(as.numeric(input$n)) }) output$nthValue <- renderText({ currentFib() }) output$nthValueInv <- renderText({ 1 / currentFib() }) }) shinyApp(ui = ui, server = server)
-
リアクティブな値です。
library(shiny) ui <- fluidPage( shiny::numericInput(inputId = 'n',label = 'n',value = 2), shiny::textOutput('nthValue'), shiny::textOutput('nthValueInv') ) fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2)) server<-shinyServer(function(input, output, session) { myReactives <- reactiveValues() observe( myReactives$currentFib <- fib(as.numeric(input$n)) ) output$nthValue <- renderText({ myReactives$currentFib }) output$nthValueInv <- renderText({ 1 / myReactives$currentFib }) }) shinyApp(ui = ui, server = server)
どのように解決するのですか?
この例では登場しませんが、キャッチがあります。
その
光沢のある
開発者が設計した
reactive()
であるように
怠け者
つまり、その中に含まれる式は、その依存関係のいずれかによって呼び出されたときにのみ実行されます。その反応依存性の一つが変更されたとき、それはキャッシュをクリアし、それ自身の依存性を通知しますが、それらの依存性の一つによって要求されるまで、それ自身は実行されません。(ですから、例えば、その唯一の依存関係が
textOutput()
要素である場合、そのタブが開かれない限り、そして開かれるまでは、実際には実行されません)。
observe()
は、一方では
熱心
であり、この式が含む式は、その反応依存性の一つが変更されるとすぐに実行されます -- たとえその値が依存性のどれにも必要とされないとしても(実際
が
がない場合でも)。このような熱心さは
望ましい
を呼び出しているときに
observe()
を呼び出す場合は、その副作用のために
無駄
しかし、その内容の戻り値を他の反応式やエンドポイントに渡すためだけに使っている場合は、となる可能性があります。
Joe Cheng は、2016 年の Shiny Developer Conference での "Effective reactive programming" に関するプレゼンテーションで、この区別を非常にうまく説明しています。
ここで利用可能
. 特に、プレゼンテーションの 30:20 あたりから始まる部分をご覧ください。
2時間目
. 40:42まで見ると(まばたきすると見逃しますよ!)、彼は簡単に
observe()
/
reactiveValue ()
の組み合わせで、お好みのものをお選びください。
関連
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
[解決済み] Rの二乗偏差の総和の算出
-
[解決済み] Rの%*%の意味 [重複]について
-
[解決済み] ggplot 2.0.0でのポイントサイズ
-
[解決済み] リストをデータフレームに変換する
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] Rでロードされているパッケージのバージョンを調べるには?
-
[解決済み] 統計的最頻値の求め方は?
-
[解決済み] Rでtrycatchの書き方
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R言語です。「接続を開くことができません」解決策
-
R: 環境と変数のスコープ問題
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] ggplot2 の軸ラベルを回転させ、間隔を空ける
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み】RでCRANミラーを選択する方法
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする