【发布时间】:2020-12-22 05:44:51
【问题描述】:
我的应用程序中有一个小而令人沮丧的问题。此对象 output$timeheader
我已尝试进行 reprex,但无法重现该错误。它按本示例中的预期工作。在我的应用程序中,对 user$stationtype 或 user$stationvar 的更改不会触发 output$timeheader
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)
【问题讨论】:
-
也许这会有所帮助:当 Shiny 行为异常时,我要做的第一件事是检查我是否没有创建 error to use twice the same output name,例如在两个选项卡中。
-
谢谢,我检查了这个。实际上似乎 user$ 变量并没有失效,即使我知道它们正在改变。
-
可能是因为 user$ 变量在
isolate中更新,所以没有失效? -
它们确实在一个isolate()中被更新了,但是为什么这是一个问题呢?我认为隔离只会阻止对隔离内变量 read 的反应。但是作业应该仍然有效吗?
-
这只是一个猜测,但正如您所做的测试所示,您可能是对的
标签: r shiny reactive-programming