В вашей функции построения графика вы можете поместить что-то вроде этого:
shiny::validate(
need((nrow(DataSet()) != 0), "No purchase history")
)
Вы можете иметь столько функций проверки, сколько вам нужно, и сделать их настолько сложными, насколько это необходимо, чтобы помочь пользователю устранить неполадки.
Основано на комментариях ОП:
output$table <- DT::renderDT(
shiny::validate(
need(input$Date[2] > input$Date[1], "Invalid Dates"),
need((nrow(data2()) != 0), "No purchase history")
)
datatable(data2())
)