如何避免在Shiny R图中出现闪烁错误?

夏天

我从J. Cheng找到了这段代码,作为freezeReactiveValue的示例。但是,在显示图之前,有时会暂时显示错误以代替图。(我需要对输入进行一些更改。)据我所知,问题是在很短的时间内-X和Y(列)停留在先前的数据集中,并且不匹配新的数据集。例如,选择“压力”数据集后,我收到一秒钟的错误消息“ FUN中的错误:找不到对象'速度'”。(但前提是事先选择了x = Speed和y = pressure来选择“汽车”数据集。)显然,该图试图抓住x变量,然后才有机会对其进行更新,但是我不知道如何防止这种情况的发生。发生。将不胜感激您有任何提示!!!谢谢!

library(shiny)
library(ggplot2)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Dataset", c("cars", "pressure", "mtcars")),
      selectInput("x", "x variable", character(0)),
      selectInput("y", "y variable", character(0))
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

server <- function(input, output, session) {
  dataset <- reactive({
    get(input$dataset, "package:datasets")
  })

  observe({
    freezeReactiveValue(input, "x")
    freezeReactiveValue(input, "y")
    columns <- names(dataset())
    updateSelectInput(session, "x", choices = columns, selected =    columns[[1]])
    updateSelectInput(session, "y", choices = columns, selected = columns[[2]])
  })

  output$plot <- renderPlot({
    Sys.sleep(2)
    req(input$dataset,input$x,input$y)
    ggplot(dataset(), aes_string(input$x, input$y)) + geom_point()
  })
}

shinyApp(ui, server)
r2evans

这与反应优先级有关,与“选择无效”有关。我认为,确保原子更新(对数据和输入)的唯一方法是,您需要将数据更新和输入更改组合到同一个块中,或者将风险相关的块以不希望的顺序执行(即,在反应链中有多个路径)。

一种方法是对所有事物都使用副作用,而不仅仅是分配$x$y(我仍在这里寻找不需要这种副作用的解决方案...)(我借鉴了@rawr的评论。)

使用ui,请尝试以下操作:

server <- function(input, output, session) {
  dataset <- reactiveVal()

  observeEvent(input$dataset, {
    req(input$dataset)
    x <- get(input$dataset, "package:datasets")
    columns <- names(x)
    updateSelectInput(session, "x", choices = columns, selected = columns[[1L]])
    updateSelectInput(session, "y", choices = columns, selected = columns[[2L]])
    dataset(x)
  })

  output$plot <- renderPlot({
    req(dataset())
    columns <- names(dataset())
    req(all(c(input$x, input$y) %in% columns))
    ggplot(dataset(), aes_string(input$x, input$y)) + geom_point()
  })
}

我将“ x”和“ y”的赋值放入重新分配数据的同一观察块中。这样,可以相对保证selectInputinput$dataset更改后立即更新

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何避免R Shiny中重复的insertUI?

如何避免在Leaflet Tile WMS实现中出现闪烁?

如何避免在R中出现循环?

如何避免在函数图中出现此错误?运行时警告:在 true_divide 中遇到无效值

如何避免在View中出现ModeState无效属性错误

如何避免Postgresql的FOR循环中出现语法错误?

原则迁移:如何避免在postUp步骤中出现SQL错误?

如何避免 Flutter EpubViewer 中出现此错误?

如何避免列表视图中的图像闪烁

Matlab:如何避免在填充等高线图中出现伪像

AngularJS:加载时如何防止页面中出现“代码闪烁”

如何避免在RRDTool图表中出现空格?

如何避免checkListBox中出现重复项

如何避免在MySQL查询中出现重复?

如何避免联接查询中出现多行?

如何避免RabbitMQ中出现重复消息?

避免R中出现for循环的建议

如何避免在R Shiny应用程序中显示为HTML标题的代码?

在Shiny中出现错误“下标超出范围”,但在R中却没有?

如何避免在使用GNU Parallel的Bash脚本中出现SIGCHLD错误

在某些元素中插入 ElementTree 时,如何避免在生成的 XML 文件中出现错误缩进?

如何避免在magento安装中出现“必须加载PHP扩展“ 0””错误?

我应该如何接受输入以避免代码中出现以下错误?

如何避免JavaScript中出现“超出最大调用堆栈大小”错误?

如何避免 RDS 实例和安全组的模块中出现循环错误

如何避免在“ with”语句中匹配所有“ else”的Dialyzer中出现“永不匹配”错误?

如何避免在Airbnb ESLint中出现“箭头函数期望返回值”错误

刷新页面时,如何避免部署的 React 应用程序中出现 404 错误?

如何使用序列图R避免在图预测中出现漏洞