在使用条件语句时,将图形集成到闪亮的仪表板中并遇到错误。我尝试使用' if'来切换图表。 selectInput的语句。我已经使用了circlize包和ggplot图而没有问题,但是当试图用它时,我得到以下错误:
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)
我还在学习,所以我确定这个简单的错误让我无法逃避,但我不确定它可能是什么。感谢帮助!
答案 0 :(得分:2)
很快,问题是如果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)