R Shiny:转置并显示用户上传的文件

时间:2018-05-18 21:14:05

标签: r shiny

我正在尝试构建一个应用程序,我需要转置用户上传的表格。使用我的代码,我能够读取用户输入并在应用程序中显示它。

以下是我的代码:

library(shiny)

ui <- fluidPage(
  fileInput("file",
            "Upload file here"),
  checkboxInput("header", "Check if you have header", value = T),

  tableOutput("table"),
  tableOutput("tabletranspose")
)

server <- function(input, output, session){

  infile <- reactive({
    if (is.null(input$file)) return(NULL)
    read.csv(input$file$datapath, header = input$header)
  })

  # To display original user's table
  output$table <- renderTable({
    infile()
  })

  # To display transposed table
  output$tabletranspose <- renderTable({

    return(t(infile()))
  })
}

shinyApp(ui, server)

但是当我运行代码以使用t(infile())获取转置时,我收到此错误:

t.default中的错误:参数不是矩阵

我怎样才能做到这一点,以便获得理想的结果?

谢谢!

1 个答案:

答案 0 :(得分:1)

你的应用程序一开始就运行了renderTable函数,因为没有上传文件,它不知道如何转置任何内容。因此,您必须延迟与req()函数的反应性。您还可以查看validate + needobserveEventeventReactive函数,因为您可以控制应用的被动“流量”。

此示例应该有效,等待上传的文件req(input$file)

library(shiny)

ui <- fluidPage(
  fileInput("file",
            "Upload file here"),
  checkboxInput("header", "Check if you have header", value = T),

  tableOutput("table"),
  tableOutput("tabletranspose")
)

server <- function(input, output, session){

  infile <- reactive({
    if (is.null(input$file)) return(NULL)
    read.csv(input$file$datapath, header = input$header)
  })

  # To display original user's table
  output$table <- renderTable({
    req(input$file)
    infile()
  })

  # To display transposed table
  output$tabletranspose <- renderTable({
    req(input$file)
    t(infile())
  })
}

shinyApp(ui, server)