提问者:小点点

争论不恰当在闪亮的ggploes


我想创建一个闪亮的应用程序,在一个表中绘制各种数据的图形。我已经创建了闪亮的应用程序

>

  • 告诉用户选择要打印的文件

    将数据文件加载到数据数据库

    询问用户要绘制哪个列

    将各种数据插入相应的数据帧

    然后绘制相应的选定列

    代码如下

        library(shiny)
    library(ggplot2)
    ui <- fluidPage(
       titlePanel("Creating a database"),
       sidebarLayout(
          sidebarPanel(
            textInput("name", "Company Name"),
            numericInput("income", "Income", value = 1),
            numericInput("expenditure", "Expenditure", value = 1),
            dateInput("date", h3("Date input"),value = Sys.Date() ,min = "0000-01-01",
                      max = Sys.Date(), format = "dd/mm/yy"),
            actionButton("Action", "Submit"),#Submit Button
            actionButton("new", "New")),
            mainPanel(
              tabsetPanel(type = "tabs",
                          tabPanel("Table", tableOutput("table")),
                          tabPanel("Download",
                                   textInput("filename", "Enter Filename for download"),   #filename
                                   helpText(strong("Warning: Append if want to update existing data.")),
                                   downloadButton('downloadData', 'Download'), #Button to save the file
                                   downloadButton('Appenddata', 'Append')),#Button to update a file )
                          tabPanel("Plot", 
                                   actionButton("filechoose", "Choose File"),
                                   br(),
    
                                   selectInput("toplot", "To Plot", choices = c("Income" = "inc",
                                                                      "Expenditure" = "exp",
                                                                      "Gross Profit" = "gprofit",
                                                                      "Net Profit" = "nprofit"
                                                                      )),
                                  actionButton("plotit", "PLOT"),
                                  plotOutput("Plot"))
              )
    
          )
    )
    )
    # Define server logic required to draw a histogram
    server <- function(input, output){
      #Global variable to save the data
      Data <- data.frame()
    
      Results <- reactive(data.frame(input$name, input$income, input$expenditure,
                                     as.character(input$date),
                                     as.character(Sys.Date())))
    
      #To append the row and display in the table when the submit button is clicked
      observeEvent(input$Action,{
        Data <<- rbind(Data,Results()) #Append the row in the dataframe
        output$table <- renderTable(Data) #Display the output in the table
      })
    
      observeEvent(input$new, {
        Data <<- NULL
        output$table <- renderTable(Data)
      })
    
      observeEvent(input$filechoose, {
        Data <<- read.csv(file.choose()) #Choose file to plot
        inc <- as.numeric(Data[ ,2]) 
        exp <- as.numeric(Data[ ,3]) 
        date <- Data[,4]
        gprofit <- exp - inc
        nprofit <- (exp - inc) * 0.06
        output$table <- renderTable(Data) #Display the choosen file details
      })
    
      output$downloadData <- downloadHandler(
        filename = function() {
          paste(input$filename , ".csv", sep="")}, # Create the download file name
        content = function(file) {
          write.csv(Data, file,row.names = FALSE) # download data
        })
    
      output$Appenddata <- downloadHandler(
        filename = function() {
          paste(input$filename, ".csv", sep="")}, 
        content = function(file) {
          write.table( Data, file=file.choose(),append = T, sep=',',
                       row.names = FALSE, col.names = FALSE) # Append data in existing
        })
    
      observeEvent(input$plotit, {
        bab <- input$toplot
                   output$Plot <- renderPlot("Plot",
                                             ggplot()+ geom_bar(data = Data, aes(x= input$toplot,
                                                                y= date)))})
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    但是当我按下“情节”按钮时,它会给出错误

    Error in *: non-numeric argument to binary operator`
    

    我错在哪里?我还使用了as。numeric可将数据转换为数字,以消除错误。开放的建议,以改变它也。请帮忙。非常感谢。


  • 共1个答案

    匿名用户

    使用switch()语句中的switch case用法,或者如何在R函数中使用switch语句?以帮助您做出选择。

    library(shiny)
    library(ggplot2)
    ui <- fluidPage(
      titlePanel("Creating a database"),
      sidebarLayout(
        sidebarPanel(
          textInput("name", "Company Name"),
          numericInput("income", "Income", value = 1),
          numericInput("expenditure", "Expenditure", value = 1),
          dateInput("date", h3("Date input"),value = Sys.Date() ,min = "0000-01-01",
                    max = Sys.Date(), format = "dd/mm/yy"),
          actionButton("Action", "Submit"),#Submit Button
          actionButton("new", "New")),
    
        mainPanel(
          tabsetPanel(type = "tabs",
                      tabPanel("Table", tableOutput("table")),
                      tabPanel("Download",
                               textInput("filename", "Enter Filename for download"),   #filename
                               helpText(strong("Warning: Append if want to update existing data.")),
                               downloadButton('downloadData', 'Download'), #Button to save the file
                               downloadButton('Appenddata', 'Append')),#Button to update a file )
                      tabPanel("Plot", 
                               actionButton("filechoose", "Choose File"),
                               br(),
    
                               selectInput("toplot", "To Plot", choices = c("Income" = "inc",
                                                                            "Expenditure" = "exp",
                                                                            "Gross Profit" = "gprofit",
                                                                            "Net Profit" = "nprofit"
                               )),
                               actionButton("plotit", "PLOT"),
                               plotOutput("Plot")
                      )
          )
    
        )
      )
    )
    # Define server logic required to draw a histogram
    server <- function(input, output){
      #Global variable to save the data
      Data <- data.frame()
    
      Results <- reactive(data.frame(input$name, input$income, input$expenditure,
                                     as.character(input$date),
                                     as.character(Sys.Date())))
    
      #To append the row and display in the table when the submit button is clicked
      observeEvent(input$Action,{
        Data <<- rbind(Data,Results()) #Append the row in the dataframe
        output$table <- renderTable(Data) #Display the output in the table
      })
    
      observeEvent(input$new, {
        Data <<- NULL
        output$table <- renderTable(Data)
      })
    
      observeEvent(input$filechoose, {
        Data <<- read.csv(file.choose()) #Choose file to plot
        output$table <- renderTable(Data) #Display the choosen file details
      })
    
      output$downloadData <- downloadHandler(
        filename = function() {
          paste(input$filename , ".csv", sep="")}, # Create the download file name
        content = function(file) {
          write.csv(Data, file,row.names = FALSE) # download data
        })
    
      output$Appenddata <- downloadHandler(
        filename = function() {
          paste(input$filename, ".csv", sep="")}, 
        content = function(file) {
          write.table( Data, file=file.choose(),append = T, sep=',',
                       row.names = FALSE, col.names = FALSE) # Append data in existing
        })
    
      observeEvent(input$plotit, {
        inc <- c(Data[ ,2]) 
        exp <- c(Data[ ,3]) 
        date <- c(Data[,4])
        gprofit <- c(Data[ ,3]- Data[ ,2])
        nprofit <- (exp - inc) * 0.06
        y = input$toplot
    
        switch(EXPR = y ,
               inc = output$Plot <- renderPlot(ggplot(data = Data, aes(x= date, y= inc))+
                                                 geom_bar(stat = "identity",
                                                          fill = "blue")+xlab("Dates")+
                                                 ylab("Income")),
               exp = output$Plot <- renderPlot(ggplot(data = Data, aes(x= date, y= exp))+
                                                 geom_bar(stat = "identity",
                                                          fill = "blue")+xlab("Dates")+
                                                 ylab("Expenditure")),
               gprofit = output$Plot <- renderPlot(ggplot(data = Data, aes(x= date, y= gprofit))+
                                                     geom_bar(stat = "identity",
                                                              fill = "blue")+xlab("Dates")+
                                                     ylab("Gross Profit")),
               nprofit =  output$Plot <- renderPlot(ggplot(data = Data, aes(x= date, y= nprofit))+
                                                      geom_bar(stat = "identity",
                                                               fill = "blue")+xlab("Dates")+
                                                      ylab("Net Profit")))})
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    相关问题