闪亮的renderText对reactValues的更改没有反应

时间:2020-09-03 02:35:38

标签: r shiny reactive-programming

我的应用程序中有一个小而令人沮丧的问题。当user $ stationtype或user $ stationvar更改时,此对象output $ timeheader <-renderText()不响应,而仅在stationname()更改时才响应。

我尝试进行reprex,但无法重现该错误。它按本示例的预期工作。在我的应用中,对user $ stationtype或user $ stationvar的更改不会触发输出$ 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 个答案:

答案 0 :(得分:1)

我的猜测是它与AVG(value) OVER(PARTITION BY test ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) 反应式由于stationame而为null有关。试试:

req