1. ホーム
  2. r

[解決済み] Shiny:observeEventとeventReactiveの違いは何ですか?

2023-03-31 18:11:16

質問

Shinyのリアクティブプログラミングに関するドキュメントを何度か読んだのですが、以下の違いがよくわかりません。 observeEventeventReactive .

とドキュメントに書かれています。

イベントに応答してアクションを実行したいときはいつでも、observeEventを使用してください。("recalculate a value" は一般的にアクションの実行としてカウントされないことに注意してください-それについては eventReactive を参照してください)。

....

イベントに応答してのみ更新される計算値を作成するには、eventReactiveを使用します。これは通常のリアクティブ式と同じですが、リアクティブな依存関係から生じる通常の無効化をすべて無視します。

私が試したすべての状況で、私は observeEventeventReactive を追加しました (私が使用する関数に関係なく、コードは問題なく動作し、パフォーマンスには明らかな影響はありません)。

この 2 つの本当の違いは何なのかを理解するのを手伝ってもらえますか?理想的には、それらが交換可能であることを示すいくつかの例が欲しいのですが、1 つは、次のような場合です。 observeEvent は機能するが eventReactive は動作し、逆もまた然りです。

どのように解決するのですか?

daatali さんのおっしゃるとおり、2つの関数は異なる目的で使用されています。

ui <- shinyUI(pageWithSidebar(
  headerPanel("eventReactive and observeEvent"),
  sidebarPanel(
    actionButton("evReactiveButton", "eventReactive"),
    br(),
    actionButton("obsEventButton", "observeEvent"),
    br(),
    actionButton("evReactiveButton2", "eventReactive2")
  ),
  mainPanel(
    verbatimTextOutput("eText"),
    verbatimTextOutput("oText")
  )
))

server <- shinyServer(function(input, output) {
  etext <- eventReactive(input$evReactiveButton, {
    runif(1)
  })
  observeEvent(input$obsEventButton,{
    output$oText <- renderText({ runif(1) })
  })
  eventReactive(input$evReactiveButton2,{
    print("Will not print")
    output$oText <- renderText({ runif(1) })
  })
  output$eText <- renderText({
    etext()
  })
})

shinyApp(ui=ui,server=server) 

eventReactive の値に基づいて変化するリアクティブな値を作成します。 eventExpr に基づいて変化するリアクティブな値を作成します。 observeEvent は単に eventExpr