我正在尝试构建一个应用程序,我需要转置用户上传的表格。使用我的代码,我能够读取用户输入并在应用程序中显示它。
以下是我的代码:
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中的错误:参数不是矩阵
我怎样才能做到这一点,以便获得理想的结果?
谢谢!
答案 0 :(得分:1)
你的应用程序一开始就运行了renderTable函数,因为没有上传文件,它不知道如何转置任何内容。因此,您必须延迟与req()
函数的反应性。您还可以查看validate + need
或observeEvent
和eventReactive
函数,因为您可以控制应用的被动“流量”。
此示例应该有效,等待上传的文件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)