- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Shiny 中,使用 updateSelectInput()
实现条件过滤器(过滤器 B 的可选选择取决于过滤器 A)是许多问题(如 here )的公认解决方案。然而,在实现它时,我经常遇到加载两次的输出对象,这在小数据集上是不可见的,但在真正的大数据集上是可见的。
我在 iris
上制作了一个最小的例子下面的数据集 Sys.sleep()
代表一个耗时的操作来显示双重负载。
防止这种情况发生的最佳方法是什么?感觉不错req()
某个地方应该可以解决问题,但我找不到方法和地点。
library(shiny)
library(dplyr)
ui <- fluidPage(
selectInput("species", "Species", choices=levels(iris$Species)),
selectInput("petal_width", "Petal Width", ""),
tableOutput("iris_table")
)
server <- function(session, input, output) {
output$iris_table <- renderTable({
Sys.sleep(2) # to show the double loading time
iris %>%
filter(Species == input$species,
Petal.Width == input$petal_width)
})
petal_width_options <- reactive({
iris$Petal.Width[iris$Species == input$species]
})
observe({
updateSelectInput(session, "petal_width", choices = petal_width_options())
})
}
shinyApp(ui, server)
最佳答案
在您的原始代码中 iris_table
通过更改 input$species
无效(然后重新渲染)一次.然后input$pedal_width
已通过 observeEvent
更新这反过来无效(然后重新渲染)iris_table
第二次。
使用 isolate()
应该无需操作按钮即可解决您的问题(这将是一个有效的替代方案)。
隔离input$species
在 renderTable
调用阻止 iris_table
当 input$species
失效(进而被重新渲染)被改变。似乎隔离 input$species
防止 iris_table
但是,当仅更改物种时根本不会更新,因为更改 input$species
始终更新 input$petal_width
, iris_table
当用户只选择另一个物种时,也会重新渲染。
library(shiny)
library(dplyr)
ui <- fluidPage(
selectInput("species", "Species", choices=levels(iris$Species)),
selectInput("petal_width", "Petal Width", ""),
tableOutput("iris_table")
)
server <- function(session, input, output) {
petal_width_options <- reactive({
iris$Petal.Width[iris$Species == input$species]
})
observeEvent(petal_width_options(),{
updateSelectInput(session, "petal_width", choices = petal_width_options())
})
output$iris_table <- renderTable({
req(input$petal_width)
Sys.sleep(2) # to show the double loading time
iris %>%
filter(Species == isolate(input$species),
Petal.Width == input$petal_width)
})
}
shinyApp(ui, server)
library(shiny)
library(dplyr)
ui <- fluidPage(
selectInput("species", "Species", choices=levels(iris$Species)),
selectInput("petal_width", "Petal Width", ""),
actionButton("render", "update table"),
tableOutput("iris_table")
)
server <- function(session, input, output) {
petal_width_options <- reactive({
iris$Petal.Width[iris$Species == input$species]
})
observeEvent(petal_width_options(),{
updateSelectInput(session, "petal_width", choices = petal_width_options())
})
output$iris_table <- renderTable({
input$render
req(isolate(input$petal_width))
Sys.sleep(2) # to show the double loading time
iris %>%
filter(Species == isolate(input$species),
Petal.Width == isolate(input$petal_width))
})
}
shinyApp(ui, server)
关于r - 使用 updateSelectInput 时防止双重加载输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327168/
我的 server.R 有以下代码,我希望我的 Shiny 应用程序根据国家选择选择国家,但它在第二行显示所有状态。我猜在这里,observe只是观察而不执行任何操作。 shinyServer(f
在 Shiny 中,使用 updateSelectInput()实现条件过滤器(过滤器 B 的可选选择取决于过滤器 A)是许多问题(如 here )的公认解决方案。然而,在实现它时,我经常遇到加载两次
我有一个 Shiny 的应用程序,其中包含多个属于层次结构的输入(A -> B -> C)。当用户选择 A - 它应该影响 B 和 C 中的选项。但是,用户只能选择 B(然后它也应该影响其他输入。如果
在我的 Shiny 应用程序中,我的用户可以从服务器上传文件以查看结果。我让用户使用 selectInput 选择文件,然后他们单击 actionButton 加载文件。我还希望用户能够删除文件和添加
我正在使用此代码,但在 updateSelectInput 中不断遇到错误:找不到对象“ session ”。当我尝试通过 fileInput 选项上传任何文件时,会发生这种情况。当我删除 updat
我的 Shiny 应用程序中的“selectInput”和“updateSelectInput”组合出现问题(我是 Shiny 的新手,但似乎无法在任何地方找到该问题的答案)。我想用 html 标签格
我有一个 selectizeInput以及一些操作链接,可以更轻松地选择某些子组。我想要一个取消选择所有值的操作链接(例如,为了更轻松地选择一项——取消选择所有项,然后用户选择一项)。编码: upda
我是一名优秀的程序员,十分优秀!