アプリのさまざまなプロット/出力で使用されているデータの更新をトリガーする2つの異なるイベントが必要です。 1つはクリックされたボタン(input$spec_button
)で、もう1つはクリックされた点上のポイント(mainplot.click$click
)です。
基本的に、両方を同時にリストしたいのですが、コードの書き方がわかりません。私が今持っているものは次のとおりです。
server.Rで:
data <- eventReactive({mainplot.click$click | input$spec_button}, {
if(input$spec_button){
# get data relevant to the button
} else {
# get data relevant to the point clicked
}
})
しかし、if-else句は機能しません
Error in mainplot.click$click | input$spec_button : operations are possible only for numeric, logical or complex types
-> mainplot.click$click | input$spec_button
句に使用できるアクション結合関数のようなものはありますか?
これは古いことは知っていますが、同じ質問がありました。私はついにそれを理解しました。式を中括弧に入れて、イベント/リアクティブオブジェクトをリストするだけです。私の(根拠のない)推測では、shinyは標準のreactive
ブロックと同じように、この式ブロックに対して同じリアクティブポインター解析を実行するだけです。
observeEvent({
input$spec_button
mainplot.click$click
}, { ... } )
また:
observeEvent(c(
input$spec_button,
mainplot.click$click
), { ... } )
私が思いついた解決策は次のとおりです。基本的に、空のreactiveValues
データホルダーを作成し、2つの別個のobserveEvent
インスタンスに基づいてその値を変更します。
data <- reactiveValues()
observeEvent(input$spec_button, {
data$data <- get.focus.spec(input=input, premise=premise,
itemname=input$dropdown.itemname, spec.info=spec.info)
})
observeEvent(mainplot.click$click, {
data$data <- get.focus.spec(input=input, premise=premise, mainplot=mainplot(),
mainplot.click_focus=mainplot.click_focus(),
spec.info=spec.info)
})
リアクティブオブジェクトを作成してこの問題を解決し、イベント変更式で使用しました。以下のように:
xxchange <- reactive({
paste(input$filter , input$term)
})
output$mypotput <- eventReactive( xxchange(), {
...
...
...
} )