在闪亮的应用程序中抑制情节警告 [英] suppress plotly warnings in shiny app

查看:18
本文介绍了在闪亮的应用程序中抑制情节警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个闪亮的应用程序,如下所示:

I have a shiny app like the following:

server.R:

shinyServer(function(input, output) {

  output$trendPlot <- renderPlotly({
    plot_ly(movies, x = length, y=rating, mode='markers', color=as.factor(year), colors = c("#132B43", "#56B1F7")) -> plott

    plott
  })
})

ui.R:

library(shiny)
library(plotly)
library(ggplot2movies)  # Needed for the 'movies' data set

shinyUI(fluidPage(
  titlePanel("Movie Ratings!"),
  mainPanel(
    plotlyOutput("trendPlot")
  )
))

这会产生一个警告:

Warning in RColorBrewer::brewer.pal(N, "Set2") :
  n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors

我想禁止显示此警告,因为它不必要地弄乱了我的日志(是的,我知道如何通过修复问题来真正消除此警告.但这仅用于说明目的.在我实际闪亮的应用程序中有没有摆脱警告).

I would like to suppress this warning because it's unnecessarily cluttering up my logs (yes, I know how to actually get rid of this warning by fixing the issue. But this is for illustrative purposes only. In my actual shiny app there is no getting rid of the warning).

suppressWarnings() 中的 renderPlotly() 中包装最终的 plott 不起作用.将 plott 更改为 suppressWarnings(print(plott)) 确实 工作,但也会在 UI 上下文之外打印绘图.这可以干净地完成吗?

Wrapping the final plott in renderPlotly() in suppressWarnings() does not work. Changing plott to suppressWarnings(print(plott)) does work but also prints the plot outside of the UI context. Can this be done cleanly?

推荐答案

在下面的示例中,我(全局)抑制警告,稍后恢复它们,但在情节完成后,使用 shinyjs::delay.有点hacky,但警告被抑制了.作为替代方案,您可以执行 options(warn = -1) 并手动恢复警告.

In the example below I suppress warnings (globally), and later restore them, but after the plot is completed, using shinyjs::delay. A bit hacky, but warnings are suppressed. As an alternative, you can just do options(warn = -1) and restore the warning manually.

library(shiny)
library(plotly)
library(shinyjs)
library(ggplot2movies)  # Needed for the 'movies' data set

ui <- shinyUI(fluidPage(
  useShinyjs(),
  titlePanel("Movie Ratings!"),
  mainPanel(
    plotlyOutput("trendPlot")
  )
))

server <- shinyServer(function(input, output) {

  # suppress warnings  
  storeWarn<- getOption("warn")
  options(warn = -1) 

  output$trendPlot <- renderPlotly({

    plot_ly(movies, x = length, y=rating, mode='markers', color=as.factor(year), colors = c("#132B43", "#56B1F7")) -> plott

    #restore warnings, delayed so plot is completed
    shinyjs::delay(expr =({ 
      options(warn = storeWarn) 
    }) ,ms = 100) 

    plott
  })
})

shinyApp(ui, server) 

这篇关于在闪亮的应用程序中抑制情节警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆