2016-08-03 39 views
2

arbeitet an der Integration von Plotly in glänzendes Dashboard und führte zu einem Fehler bei der Verwendung von bedingten Anweisungen. Ich versuche, Diagramme mit einer 'if' Anweisung mit selectInput zu wechseln. Ich habe dies mit dem Circlize-Paket und ggplot Graphen ohne Problem verwendet, aber wenn ich es plotly verwenden möchte, bekomme ich den folgenden Fehler:ggplotly keine anwendbare Methode für 'plotly_build' angewendet auf ein Objekt der Klasse "NULL" if Anweisungen

Fehler in UseMethod: keine anwendbare Methode für 'plotly_build' auf ein Objekt der Klasse angewendet " NULL“

fand ich einen Kommentar verfassen mit ähnlichen Problemen, aber nicht genau meine konkrete Frage zu beantworten:

Convert ggplot object to plotly in shiny application

hier ist eine Probe, die einen ähnlichen Code zu dem in der Buchung verwendet unter Verwendung von oben, aber mit Änderungen, um zu zeigen, was ich zu tun habe, und der Fehler, der Pop hält Ping-up:

library(shiny) 
library(ggplot2) 
library(ggthemes) 
library(plotly) 
ui = dashboardPage(
    dashboardHeader(title = 'sample'), 
    dashboardSidebar(), ##Body content dashboardBody(
     fluidRow(
      box(background = "green", selectInput(inputId = "dimension", 
       label = strong("Choose Metric"), 
       choices = c('choice' = '1', 'choice2' = '2'), 
       multiple = FALSE, selectize = TRUE)), 

      box(plotlyOutput(outputId = 'plot2'))) 
    )) 

server < - function(input, output) { 

    output$plot2 < -renderPlotly({ 
     print(
      ggplotly(
       ggplot(data = mtcars, aes(x = disp, y = cyl)) + geom_smooth(method = 
        lm, formula = y~x) + geom_point() + theme_gdocs())) 

     if (input$dimension == '2') { 
      print(
       ggplotly(
        ggplot(data = mtcars, aes(x = hp, y = cyl)) + geom_smooth(method = 
         lm, formula = y~x) + geom_point() + theme_gdocs())) 

     } 
    }) 
} 

shinyApp(ui, server) 

Ich lerne immer noch so das ich bin sicher, dass ein einfacher Fehler, den ich entgeht, aber ich bin nicht sicher, was es sein könnte. Schätze die Hilfe!

Antwort

2

In Kürze, das Problem war, dass, wenn war '1' gab es keinen Rückgabewert. Sie druckten das Stück aus, aber R ging dann noch einen Schritt weiter und prüfte, ob die Bedingung erfüllt war. Es gibt wenige Möglichkeiten, es richtig zu codieren.

Sie können das Diagramm im Objekt speichern, sagen res, und wenn die Bedingung erfüllt ist, überschreiben Sie es mit einem neuen Diagramm und schließlich am Ende der Funktion zurück - siehe das Beispiel unten. Sie können auch die else-Anweisung verwenden.

library(shiny) 
library(shinydashboard) 
library(ggplot2) 
library(ggthemes) 
library(plotly) 

ui = dashboardPage(
    dashboardHeader(title = 'sample') , 
    dashboardSidebar(), 
    ## Body content 
    dashboardBody(
    fluidRow(
     box(background="green", selectInput(inputId = "dimension", 
              label = strong("Choose Metric"), 
              choices = c('choice'='1','choice2'='2'), 
              multiple = FALSE, selectize = TRUE)), 

     box(plotlyOutput(outputId = 'plot2'))) 
)) 

server <- function(input, output) { 

    output$plot2 <- renderPlotly({ 

    res <- ggplotly(
       ggplot(data = mtcars, aes(x = disp, y = cyl)) + 
       geom_smooth(method = lm, formula = y ~ x) + 
       geom_point() + 
       theme_gdocs()) 


    if (input$dimension == '2') { 

     res <- ggplotly(
       ggplot(data = mtcars, aes(x = hp, y = cyl)) + 
        geom_smooth(method = lm, formula = y ~ x) + 
        geom_point() + 
        theme_gdocs()) 
    } 
    res 
    }) 
} 

shinyApp(ui, server) 
+1

Das war perfekt, funktionierte wie ein Charme. Schätze die Hilfe sehr! – LoF10