gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:56:44 31 4
gpt4 key购买 nike

致力于将绘图集成到 Shiny 的仪表板中,并在使用条件语句时遇到错误。我正在尝试使用带有 selectInput 的“if”语句来切换图表。我已经将其与 circlize 包和 ggplot 图表一起使用,没有出现任何问题,但是当尝试将其与plotly 一起使用时,出现以下错误:

UseMethod 中的错误:“plotly_build”没有适用的方法应用于“NULL”类的对象

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

Convert ggplot object to plotly in shiny application

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

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' 则没有返回值。您正在打印绘图,但 R 更进一步检查条件是否满足。正确编码的方法很少。

您可以将绘图保存在对象中,例如 res,如果满足条件,则用新绘图覆盖它,最后在函数末尾返回它 - 请参阅下面的示例。您还可以使用 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)

关于r - ggplotly 没有适用于 'plotly_build' 的方法应用于类 "NULL"if 语句的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749087/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com