- 参考記事はこちら
- 上記リンクは英語なので日本語で説明します。下記のようにshinyのserver.Rにevent_data("plotly_click", source = "A")でクリックイベントを取得してshinyアプリの画面にevent_data("plotly_click", source = "A")の内容を表示させるコードがあるとします。
output$plotVal <- renderPrint({
e <- event_data("plotly_click", source = "A")
})
この場合、event_data("plotly_click", source = "A")にNULLを代入したい場合に
event_data("plotly_click", source = "A") = NULL
としてもデータの型が合わなかったりshinyのsessionの情報がevent_data()に含まれている為、代入できません。
そこでNULLを代入するためには下記のように上記コードを書き換える方法があります。
data <- reactiveValues(e=NULL)
observe({
data$e <- event_data("plotly_click", source = "A")
})
output$plotVal <- renderPrint({
e <- data$e
if (is.null(e)) {
NULL
} else {
e
}
})
observeEvent(input[["clearEvent"]], {
data$e <- NULL
})
この場合、書き換える前と同様に画面にはevent_data("plotly_click", source = "A")の内容が表示されるはずです。event_data("plotly_click", source = "A")の中身をNULLにする場合は、input[["clearEvent"]]の値を画面上で変更することで、data$eにNULLが入り、output$plotVal関数内のdata$eもNULLとなり、event_data("plotly_click", source = "A")に直接NULLを代入したわけではないですが結果的にevent_data("plotly_click", source = "A")にNULLを代入したことになります。
input[["clearEvent"]]は例えば、shinyアプリの画面上で任意のボタンを押したり、任意のセレクトボックスの値を変更することで動きます。あなたがevent_data("plotly_click", source = "A")の中身をNULLにしたいタイミングをinput[["clearEvent"]]に当てはめるとよいと思います。
以上、ご参考まで