Условные сообщения об ошибках для Shiny App

У меня есть приложение, в котором вы вводите свои собственные данные, а затем есть два выбранных входа, где пользователь может выбрать свою зависимую переменную (столбец из введенных данных) и несколько независимых переменных. Я хочу сделать так, чтобы, если они выбирают столбец из своих данных, который имеет нулевое значение, сразу же появится сообщение об ошибке, сообщающее им, что есть нулевое значение. Это связано с тем, что при наличии нулевого значения приложение не будет запускаться и вылетать при нажатии кнопки запуска.

Моей первой мыслью было использовать команду validate следующим образом:

validate(
 need(is.na(input$yvariable), "Error: null value detected in variable")
 ))  

(input $ yvariable является зависимой переменной)

Тем не менее, это, кажется, ничего не делает, когда я применяю это. Я также пытался использовать операторы if-else, чтобы скрыть текст подсказки в пользовательском интерфейсе, но мне также не повезло. Опять же, важно, чтобы ошибка появлялась, как только они выбирают столбец с любыми нулевыми значениями. Есть ли какой-нибудь четкий способ это осуществить? Кто-нибудь делал что-то подобное?

Спасибо!

1 ответ

Решение

Вот стартовый код, который вы можете использовать для построения поверх него. Следующий код использует showModal чтобы всплывающее сообщение, когда отсутствует значение, вы можете настроить это сообщение, как вы хотите. Другой вариант будет использовать shinyjs::disable отключить кнопку Run, когда отсутствует значение.

  library(shiny)
  ui <- fluidPage(
    uiOutput('inVar'),
    textOutput("textsummary")
  )

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

    df <- mtcars

    df$disp[3:8]<-NA

    observe(print(df[,input$DepVar]))

    output$inVar <- renderUI({
      selectInput(inputId = "DepVar", label = h4("Select variables:"), choices =  colnames(df))
    })

    output$textsummary <- renderText({
      paste("Missing of",input$DepVar, " is ", sum(is.na(df[,input$DepVar])))
    })

    observe({
      if(sum(is.na(df[,input$DepVar]))>0)
      showModal(modalDialog(
        title = "Somewhat important message",
        "This is a somewhat important message.",
        easyClose = TRUE,
        footer = NULL
      ))
    })

  }

  shinyApp(ui, server) 
Другие вопросы по тегам