У меня есть блестящее приложение, в котором пользователь загружает два 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)
})
Последняя строка предназначена для возврата моего файла по умолчанию, который я читал ранее, если входной файл не загружен. Это не работает. Что я должен делать? Стоит ли смотреть на это под другим углом?
Что-то вроде этого должно работать:
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)
req
не хочет значений NULL, поэтому ваше условие неверно, возврат пуст. И у вас может быть только один возврат в реактиве