从Shiny

时间:2018-01-07 20:14:06

标签: r shiny

我有一个闪亮的应用程序,其中包含以下ui:

library(rhandsontable)
library(shiny)
library(ggplot2)

ui =  fluidPage(

  # App title ----
  titlePanel("Tabsets"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Tabset w/ plot, summary, and table ----
      tabsetPanel(type = "tabs",
                  tabPanel("Summary", rHandsontableOutput('contents'),
                           actionButton("saveBtn", "Save changes")
                  ),
                  tabPanel("Tab",
                           rHandsontableOutput('contentFinal')),
                  tabPanel("Dashboard",
                           plotOutput('dashboard1'))




      )

    )
  )
)

以下服务器

library(dplyr)
library(rhandsontable)
options(shiny.maxRequestSize = 9*1024^2)

server = function(input, output) {

  values <- reactiveValues()

  Post <- c("", "")
  list2 <- c(12,13)
  df <- data.frame(Post, list2)


  output$contents <- renderRHandsontable({

    rhandsontable(df, width = 550, height = 300) %>%    
      hot_col(col = "Post", type = "dropdown")
  })

  saveData <- eventReactive({input$saveBtn},{
    finalDF <- hot_to_r(input$contents)
    finalDF$Post <- ifelse(finalDF$Post =="",NA,finalDF$Post)
    newDF <- finalDF[complete.cases(finalDF),]
    return(newDF)
  })

  output$contentFinal <- renderRHandsontable(
    rhandsontable(saveData())
  )

  output$dashboard1 <- renderPlot(
    ggplot(input$contentFinal, aes(x = Post, y = list2 )) +
      geom_bar(stat = "identity")

  )
  observeEvent(input$saveBtn, saveData())

}

shinyApp(ui = ui, server = server)

流程是这样的:

  1. 在第一个标签中,我显示带有空帖柱的数据
  2. 在此标签中,我可以为帖子添加名称并保存。
  3. 一旦我保存了包含post值的行,就会在下一个标签中显示。
  4. 然后我要做的下一件事是在仪表板选项卡中显示一个显示数据的视觉效果。因此我创建:

    output$dashboard1 <- renderPlot(
    
        ggplot(input$contentFinal, aes(x = Post, y = List2 )) +
          geom_bar(stat = "identity")
    
      )
    

    然而,这给了我以下ggplot2错误:

      

    ggplot2不知道如何处理班级列表的数据

    对这里出了什么问题的想法?

1 个答案:

答案 0 :(得分:0)

问题是因为input$contentFinal是手动数据。我们需要使用hot_to_r函数将其转换为R对象。

应使用以下内容绘制ggplot:

ggplot(hot_to_r(input$contentFinal), aes(x = Post, y = list2 )) + geom_bar(stat = "identity")

希望它有所帮助!