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)
致力于将 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)