アプリに小さなイライラする問題があります。このオブジェクトoutput$timeheader <- renderText()は、user$stationtypeまたはuser$stationvarが変更された場合には反応せず、stationname()が変更された場合にのみ反応します。
リプレックスを作成しようとしましたが、バグを再現できません。この例では意図したとおりに動作します。私のアプリでは、user$stationtype または user$stationvar を変更しても、output$timeheader <- renderText() はトリガーされません。
library(shiny)
ui <- tagList(
navbarPage(
title = "navbarPage",
tabPanel(
title = "tabPanel",
tags$div(
absolutePanel(
tabsetPanel(
tabPanel(
title = "title",
tags$div(
actionButton("changesel", "Choose a different variable"),
textInput("map_marker_click", "Enter station name"),
h4(strong(textOutput("timeheader")))
)
)
)
)
)
)
)
)
server <- function(input, output, session){
# collect inputs needed by model
user <- reactiveValues(
stationvar = NA,
stationtype = NA
)
# observe changes in ui and pass to user$
observe({
input$changesel # observe button click
ot <- runif(1)
isolate({
obsnut <- ifelse(ot > 0.6, "DIN", "NONE") # obs to use
obsgroup <- ifelse(ot > 0.3, "Streams", "none")
if (!setequal(obsnut, user$stationvar)){
cat("user$stationvar <-", obsnut, "\n")
user$stationvar <- obsnut
}
if (!setequal(obsgroup, user$stationtype)){
cat("user$stationtype <-", obsgroup, "\n")
user$stationtype <- obsgroup
}
}) # end isolate
})
# timeheader ####
output$timeheader <- renderText({
# req(user$stationtype, user$stationvar)
# FIXME why doesn't this stupid text show!!! ####
cat("Time series header:", user$stationtype, stationname(), user$stationvar, "\n")
if (isTRUE(stationname() > "")){
"Time series plot:"
} else if (isTRUE(user$stationvar != "NONE")){
"Enter station name to view data:"
} else {
""
}
})
## click on marker to get stationname ####
stationname <- reactive({
req(isTRUE(user$stationvar != "NONE"))
cat("Marker click\n")
input$map_marker_click
})
}
shinyApp(ui, server)
1
おそらくこれが役に立つかもしれません: Shiny が異常な動作をしたとき、私が最初に行うことはo 同じ出力名を 2 回 (たとえば 2 つのタブで) 使用するという間違いを犯していないかどうかを確認してください。
– ワルディ
2020 年 9 月 3 日 19:18
ありがとう、確認しました。実際には、user$ 変数が変更されていることはわかっていますが、無効化されていないようです。
– サイモン・ウッドワード
2020 年 9 月 3 日 19:28
1
user$ 変数は分離で更新されるため無効にならない可能性がありますか?
– ワルディ
2020 年 9 月 3 日 19:35
確かに、isolate() で更新されていますが、これがなぜ問題なのでしょうか?私は、isolate は、isolate 内で読み取られた変数への反応を防ぐだけだと思っていました。しかし、割り当ては引き続き機能するはずです?
– サイモン・ウッドワード
2020 年 9 月 3 日 19:40
1
これは単なる推測でしたが、行ったテストからわかるように、おそらく正しいでしょう。
– ワルディ
2020 年 9 月 3 日 19:56
------------------------
私の推測では、req によりステーションのリアクティブが null になることに関係があるのではないかと思います。試してみてください:
stationname <- eventReactive(input$map_marker_click,{
req(isTRUE(user$stationvar != "NONE"))
cat("Marker click\n")
input$map_marker_click
}, ignoreNULL = F)
1
その通りです!ステーション名をより注意深く初期化すると、機能します。ありがとう!
– サイモン・ウッドワード
2020 年 9 月 3 日 20:42