ggplotly 'plotly_build' 没有适用的方法应用于 class "NULL" 的对象 if 语句

ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

致力于将 plotly 集成到闪亮的仪表板中,并 运行 将其集成到使用条件语句时的错误中。我正在尝试使用带有 selectInput 的 'if' 语句来切换图表。我已经将它与 circlize 包和 ggplot 图一起使用,没有问题,但是当尝试将它与 plotly 一起使用时,我收到以下错误:

UseMethod 错误:没有适用于 'plotly_build' 的方法应用于 class "NULL"

的对象

我在这里发现了一个有类似问题的帖子,但没有完全回答我的具体问题:

这是一个示例,它使用与上面帖子中使用的代码类似的代码,但进行了修改以显示我要执行的操作以及不断弹出的错误:

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)

我还在学习,所以我确定这是一个我没有想到的简单错误,但我不确定它可能是什么。感谢您的帮助!

不久,问题是如果 input$dimension'1',则没有 return 值。您正在打印绘图,但 R 更进一步并检查是否满足条件。正确编码的方法很少。

您可以将绘图保存在对象中,例如 res,如果满足条件,则用新绘图覆盖它,最后 return 在函数末尾将其覆盖 - 参见下面的例子。您也可以使用 else 语句。

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)