我有一个闪亮的应用程序,用户上传两个 csv 文件 - 一个参考数据集和一个测试数据集。数据集在服务器代码中的反应式表达式中进行操作,然后使用其输出来生成表格和图表。
如果没有上传参考数据集,我想使用默认参考数据集。如果没有上传数据,如何让反应式表达式返回默认数据?
我尝试在应用程序开头加载数据(将其称为“default.ref.data”,然后在服务器代码中使用以下内容:
ref.data=reactive({
req(input$ref.upload)
# read the data frame that has been uploaded
df.ref1 <- read.csv(input$ref.upload$datapath)
#do some stuff
return(df.ref1)
if(is.null(input$files)) return(default.ref.data)
})
Run Code Online (Sandbox Code Playgroud)
最后一行的目的是在没有上传输入文件的情况下返回我之前读入的默认文件。这是行不通的。我应该做什么?我应该从不同的角度来看待它吗?
像这样的东西应该有效:
library(shiny)
ui <- fluidPage(fileInput("file1", "Choose CSV File",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")), tableOutput("tbl"))
server <- function(input, output) {
get_file_or_default <- reactive({
if (is.null(input$file1)) {
mtcars
} else {
read.csv(input$file1$datapath)
}
})
output$tbl <- renderTable(get_file_or_default())
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)