2016-08-18 4 views
1

ich eine glänzende app wie die folgende haben:Unterdrückungs plotly Warnungen in glänzenden app

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:

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 
:

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

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

dies eine Warnung erzeugt

Ich möchte diese Warnung unterdrücken, weil sie meine Protokolle unnötig überlastet (ja, ich weiß, wie ich diese Warnung beheben kann, indem ich das Problem behebe. Dies dient jedoch nur der Veranschaulichung. In meiner wirklich glänzenden App gibt es keine Warnung mehr.

Einpacken der letzten plott in renderPlotly() in suppressWarnings() funktioniert nicht. Das Ändern von plott zu suppressWarnings(print(plott))funktioniert funktioniert, aber druckt das Diagramm auch außerhalb des UI-Kontext. Kann das sauber gemacht werden?

Antwort

1

Im folgenden Beispiel unterdrücke ich Warnungen (global) und speichere sie später wieder, aber nachdem der Plot abgeschlossen ist, benutze shinyjs :: delay. Ein bisschen hacky, aber Warnungen werden unterdrückt. Alternativ können Sie einfach options(warn = -1) ausführen und die Warnung manuell wiederherstellen.

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) 
Verwandte Themen