根据用户选择选择要在闪亮的应用程序中显示的图

时间:2018-12-05 20:10:40

标签: r shiny

我有一个闪亮的应用程序,可以生成2个图和一张表。正如您将看到的,我想根据radiobuttons()输入选择每次显示哪一个。到现在为止,我收到一个错误object of type 'closure' is not subsettable,哪个对象的类型确切是封闭的?请注意,第一个是ggplot对象,第二个是plotly对象,第三个是数据表。

    # ui.R
        library(shiny)
        library(plotly)
        pageWithSidebar(
          headerPanel('Iris k-means clustering'),
          sidebarPanel(
            uiOutput("filter_degree")

          ),
          mainPanel(
            uiOutput('plot')

          )
        )
        #server.r
        function(input, output, session) {
          output$filter_degree<-renderUI({
            radioButtons("rd","Select Option",choices = c("Mileage","Regression",'Table'),
                         selected = "Mileage")
          })


          output$plot <- renderUI({
           if(input$rd=="Mileage"){
             output$plot1<-renderUI({
            # Boxplots of mpg by number of gears 
            # observations (points) are overlayed and jittered
            qplot(gear, mpg, data=mtcars, geom=c("boxplot", "jitter"), 
                  fill=gear, main="Mileage by Gear Number",
                  xlab="", ylab="Miles per Gallon")
             })
            }


            else if(input$rd=="Regression"){
              output$plot2<-renderUI({
            x <- c(1:100)
            random_y <- rnorm(100, mean = 0)
            data <- data.frame(x, random_y)

            p <- plot_ly(data, x = ~x, y = ~random_y, type = 'scatter', mode = 'lines')
              })
            }


            else if(input$rd=="Table"){

              output$tbl =  DT::renderDataTable(datatable(
                iris, options = list(lengthChange = FALSE,scrollY = T, scroller = TRUE, scrollX = T),selection = list(target="cell",mode="single"),rownames = F)
              )
            }

          })

        }

1 个答案:

答案 0 :(得分:1)

您需要提供绘图/表格输出,作为if / then序列(plotOutput("plot1")等)的一部分。否则,它就无法渲染。另外,ploty电话中似乎有一个错误,但我还没有为您解决。

library(shiny)
library(DT)
library(plotly)
ui <- pageWithSidebar(
  headerPanel('Iris k-means clustering'),
  sidebarPanel(
    uiOutput("filter_degree")

  ),
  mainPanel(
    uiOutput('plot')

  )
)
#server.r
server <- function(input, output, session) {
  output$filter_degree<-renderUI({
    radioButtons("rd","Select Option",choices = c("Mileage","Regression",'Table'),
                 selected = "Mileage")
  })


  output$plot <- renderUI({
    if(input$rd=="Mileage"){
      output$plot1<-renderPlot({
        # Boxplots of mpg by number of gears 
        # observations (points) are overlayed and jittered
        qplot(gear, mpg, data=mtcars, geom=c("boxplot", "jitter"), 
              fill=gear, main="Mileage by Gear Number",
              xlab="", ylab="Miles per Gallon")
      })
      plotOutput("plot1")
    }


    else if(input$rd=="Regression"){
      output$plot2<-renderUI({
        x <- c(1:100)
        random_y <- rnorm(100, mean = 0)
        data <- data.frame(x, random_y)

        p <- plot_ly(data, x = ~x, y = ~random_y, type = 'scatter', mode = 'lines')
      })
      plotlyOutput("plot2")
    }


    else if(input$rd=="Table"){

      output$tbl =  DT::renderDataTable(datatable(
        iris, options = list(lengthChange = FALSE,scrollY = T, scroller = TRUE, scrollX = T),selection = list(target="cell",mode="single"),rownames = F)
      )

      dataTableOutput("tbl")
    }

  })

}
shinyApp(ui = ui, server = server)