如何在闪亮的应用程序中同时更新两个或多个表

时间:2016-09-28 09:43:40

标签: r shiny

我有多个表要更新我可以在一个表中上传文本,但我想在shiny app中一次性上传所有表中的不同文本。我搜索了很多,但由于我是shiny app的新手,我没有办法做到这一点。以下是我的代码。请帮忙。提前谢谢。

error7 <- read.csv(file.path("D:/puma/error7.csv"), sep = "," , header =TRUE)

library(shiny)
library(shinythemes)

ui <- shinyUI( fluidPage(theme=shinytheme("readable"),
                     titlePanel(h3("PUMA", style = "color:black")),
                     sidebarLayout(
                       sidebarPanel(
                         tags$head(
                           tags$style("body {background-color: pink; }")),
                         textInput("Possible.cause", label="Add a new Possible.cause ", value="Enter Possible.cause"),
                         textInput("Check", label="Add a new Check", value="Enter Check"),
                         textInput("Remedy", label="Add a new Remedy", value="Enter Remedy"),
                         actionButton("addButton", "UPLOAD!")
                       ),
                       mainPanel(
                         tableOutput("table"), width = 12)
                     )))

server = function(input, output) {    
 values <- reactiveValues()
 values$df <- error7 
  row.names(error7) <- NULL

    observe({

   if(input$addButton > 0) {

    newLine <- isolate(c(input$Possible.cause, input$Check, input$Remedy))
  isolate(values$df <- rbind(as.matrix(values$df), unlist(newLine)))
  write.csv(values$df,file.path("D:/puma/error7.csv"), sep = "," ,
            row.names = FALSE,append=FALSE)
}
  })

  output$table <- renderTable({values$df}, include.rownames=F)
 }

shinyApp(ui = ui, server = server) 

1 个答案:

答案 0 :(得分:0)

您的代码存在多处问题。我正在逐步完成它:

  • 1.1,这不是错误,但您引用本地文件来读写csv文件。它将正常工作,直到您部署您的应用程序 并且服务器没有指定位置的文件。一世 将其更改为应用程序的根文件夹"./error7.csv"(并将文件复制到项目文件夹)。 如果你想要,你可以保持原样
  • 1.2,使用stringsAsFactors = F以避免处理factor

代码:

error7 <- read.csv(file.path("./error7.csv"), sep = "," , header =TRUE, stringsAsFactors = F)
  • 2,设置row.names并不重要,因为您没有使用它。

我们可以删除此行:row.names(error7) <- NULL

  • 3.1,当您只想处理单个事件(例如按钮点击)时,请使用observeEvent代替observe
  • 3.2,在这种情况下不需要isolate
  • 3.3,修改了rbind部分:使用names(newLine) <- names(values$df) data.framenewLine vector可以 捆绑在一起。
  • 3.4,write.csv始终使用逗号作为分隔符,因此无需指定它。也未使用append=FALSE

代码:

observeEvent(input$addButton,{
    newLine <- c(input$Possible.cause, input$Check, input$Remedy)
    names(newLine) <- names(values$df)
    values$df <- rbind(values$df, newLine)
    write.csv(values$df,file.path("./error7.csv"), row.names = FALSE)
  })

完整代码:

error7 <- read.csv(file.path("./error7.csv"), sep = "," , header =TRUE, stringsAsFactors = F)
library(shiny)
library(shinythemes)

ui <- shinyUI( fluidPage(theme=shinytheme("readable"),
                         titlePanel(h3("PUMA", style = "color:black")),
                         sidebarLayout(
                           sidebarPanel(
                             tags$head(
                               tags$style("body {background-color: pink; }")),
                             textInput("Possible.cause", label="Add a new Possible.cause ", value="Enter Possible.cause"),
                             textInput("Check", label="Add a new Check", value="Enter Check"),
                             textInput("Remedy", label="Add a new Remedy", value="Enter Remedy"),
                             actionButton("addButton", "UPLOAD!")
                           ),
                           mainPanel(
                             tableOutput("table"), width = 12)
                         )))

server = function(input, output) {    
  values <- reactiveValues()
  values$df <- error7 

  observeEvent(input$addButton,{
    newLine <- c(input$Possible.cause, input$Check, input$Remedy)
    names(newLine) <- names(values$df)
    values$df <- rbind(values$df, newLine)
    write.csv(values$df,file.path("./error7.csv"), row.names = FALSE)
  })

  output$table <- renderTable({values$df}, include.rownames=F)
}

shinyApp(ui = ui, server = server)