RShiny播放以不同方式上传的多个csv

时间:2018-07-19 22:10:33

标签: r

我一直在参考以下帖子,这对帮助我了解Rshiny功能非常有帮助:

How can I update plot from rhandsontable with uploaded data, without clicking into the table first?

在掌握“观察”的概念时,我仍然遇到一些麻烦,因此这可能是这里的问题。我想上传2个csv,其中1个是静态的(将其保存在单独的选项卡中),而1个是可编辑的(点击按钮后,相应的绘图中会反映出编辑内容)。我的最终目标是能够在相同的轴上一起绘制这些数据集,但是现在,我很难获得表格显示,这使我认为它没有正确上传。我正在使用以下代码:

library(shiny)
library(rhandsontable)

#sample data
year <- substr(Sys.Date(),1,4)
empty_dat=as.data.frame(matrix(1,nrow = 3,ncol = 4,dimnames = list(c("Cat A", "Cat B", "Cat C"),
                                                                   c(paste("May",year),paste("June",year),paste("July",year),
                                                                     paste("August",year)))))

ui = fluidPage(sidebarLayout(
  sidebarPanel(
    #static data input
    fileInput('file1_new', 'Choose CSV File'),
    #reactive data inut
    fileInput('file1', 'Choose CSV File'),
    #display reactive data
    rHandsontableOutput('contents'),
    actionButton("go", "Plot Update"),
    width=7

  ),
  mainPanel(
      tabsetPanel(
        #plot reactive data first tab
        tabPanel("Plot", plotOutput("plot1")),
        #table static data second tab
        tabPanel("Table", tableOutput("table"))
      )
  )
))


server = function(input, output) {

  #static input
  output$table <- renderTable({

    inFile <- input$file_new

    if (is.null(inFile))
      return(NULL)

    read.csv(inFile$datapath, header = input$header,
             sep = input$sep, quote = input$quote)
  })


  indat <- reactiveValues(data=empty_dat)

  #reactive input
  observe({
    inFile = input$file1
    if (is.null(inFile))
      return(NULL)
    data1 = read.csv(inFile$datapath)
    indat$data <- data1
  })

  observe({
    if(!is.null(input$contents))
      indat$data <- hot_to_r(input$contents)

  })  

  output$contents <- renderRHandsontable({
    rhandsontable(indat$data)
  })


  #***example uses only one column-why I attempt multiple columns (indat$data[,1:4],indat$data[],indat$data) I get an error
  #update data when user hits button
  test <- eventReactive(input$go, {
  return(indat$data[,3])
  })


  output$plot1 <- renderPlot({
    #plot updated data
    plot(test(),type = "l")
  })

}


shinyApp(ui, server)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我对代码做了很少的更改,现在第二个选项卡显示了静态表。 我不确定这是否是您想要的,但是这是代码。我所做的更改位于代码下方。

library(shiny)
library(rhandsontable)

#sample data
year <- substr(Sys.Date(),1,4)
empty_dat=as.data.frame(matrix(1,nrow = 3,ncol = 4,dimnames = list(c("Cat A", "Cat B", "Cat C"),
                                                                   c(paste("May",year),paste("June",year),paste("July",year),
                                                                     paste("August",year)))))

ui = fluidPage(sidebarLayout(
  sidebarPanel(
    #static data input
    fileInput('file1_new', 'Choose CSV File'),
    #reactive data inut
    fileInput('file1', 'Choose CSV File'),
    #display reactive data
    rHandsontableOutput('contents'),
    actionButton("go", "Plot Update"),
    width=7

  ),
  mainPanel(
    tabsetPanel(
      #plot reactive data first tab
      tabPanel("Plot", plotOutput("plot1")),
      #table static data second tab
      tabPanel("Table", tableOutput("table"))
    )
  )
))


server = function(input, output) {

  #static input
  output$table <- renderTable({

    inFile <- input$file1_new

    if (is.null(inFile))
      {return(mtcars)}
    else{
    read.csv(inFile$datapath)}
  })


  indat <- reactiveValues(data=empty_dat)

  #reactive input
  observe({
    inFile = input$file1
    if (is.null(inFile))
      return(NULL)
    data1 = read.csv(inFile$datapath)
    indat$data <- data1
  })

  observe({
    if(!is.null(input$contents))
      indat$data <- hot_to_r(input$contents)

  })  

  output$contents <- renderRHandsontable({
    rhandsontable(indat$data)
  })


  #***example uses only one column-why I attempt multiple columns (indat$data[,1:4],indat$data[],indat$data) I get an error
  #update data when user hits button
  test <- eventReactive(input$go, {
    return(indat$data[,3])
  })


  output$plot1 <- renderPlot({
    #plot updated data
    plot(test(),type = "l")
  })

}


shinyApp(ui, server)

因此,在执行renderTable的部分中,变量名略有错误:p,而在rea​​d.csv中,参数过多。

 output$table <- renderTable({

    inFile <- input$file1_new

    if (is.null(inFile))
      {return(mtcars)}
    else{
    read.csv(inFile$datapath)}
  })

请让我知道这是否对您有用...干杯!