R Shiny подтвердить возврат ошибки, когда данные действительны - PullRequest
0 голосов
/ 09 мая 2018

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

Используя следующий код, я получаю ошибку ниже.

else if (input$geo=="Alaska, 2015") {
    data <- switch(
        validate(need(input$var != "Sexual Orientation", "Data Unavailable")),
        input$var, 
        "Housing Status" = hmlweightak,
        "Sex" = sexweightak,
        "Race/Ethnicity" = raceethweightak,
        "Sexual Orientation" = "",
        "Bullied at School in the last 12 Months" = bsweightak,
        "Missed School due to Safety Concerns" = usweightak,
        "Deliberately hurt by an intimate partner" = pvweightak,
        "Forced to Perform Sexual Acts by Intimate Partner in the last 12 Months" = saweightak,
        "Binge Drank in the last 30 days" = bdweightak,
        "First Tried Alcohol by Age 12" = faweightak,
        "First Tried Marijuana by Age 12" = fmweightak,
        "Suffered from Depression in the last 12 Months" = dweightak,
        "Had Suicidal Thoughts in the last 12 Months" = stweightak,
        "Attempted Suicide in the last 12 Months" = asweightak,
        "Required Medical Attention After Suicide Attempt in the last 12 Months" = smweightak,
        "Ever Used Illegal Drugs" = sdweightak,
        "Used Prescription Drugs Without a Prescription" = pdweightak,
        "Sexually Active by Age 13" = fiweightak,
        "Drank or Used Drugs Before Last Sexual Intercourse" = ddliweightak,
        "Breakfast in the Last 7 Days" = "",
        "Average Hours of Sleep per Night" = hsweightak,
        "Used a Condom During Last Sexual Intercourse" = clweightak,
        "Asthma" = aweightak
    )
}

enter image description here

Я также получаю эту ошибку, когда добавляю get() до input$var, и в какой-то момент я получал другую ошибку, где он в основном перечислял все переменные, но я не могу воспроизвести это сейчас. Это всего лишь небольшая часть кода, поэтому, пожалуйста, дайте мне знать, было бы полезно больше кода или снимков экрана, но я надеюсь, что это что-то простое, поскольку кажется, что оно наполовину работает. Заранее спасибо!

1 Ответ

0 голосов
/ 10 мая 2018

Проблема в вашей комбинации операторов switch и validate.

Допустим, на основании введенного вами значения $ dropDownValue вы хотите вернуть один или другой набор данных. В случае iris return datasets::iris вам понадобится следующее утверждение.

switch(input$dropDownValue,
       iris = datasets::iris,
       cars = datasets::cars)

validate просто останавливает выполнение функции и добавляет сообщение проверки, если первый оператор оценивается как FALSE.

В вашем случае это должно быть что-то вроде

validate(need(input$var != "Sexual Orientation", "Data Unavailable"))
data <- switch(input$var, 
               "Housing Status" = hmlweightak,
               "Sex" = sexweightak,
               [...]
               )

См. Код ниже для примера использования validate и switch.

library(shiny)
library(datasets)

ui <- fluidPage(
   selectInput("dropDownValue", "Data", c("no data", "iris", "cars")),
    mainPanel(
      plotOutput("plot")
    )
)

server <- function(input, output) {
  data <- reactive({
    validate(
      need((input$dropDownValue == "iris" || input$dropDownValue == "cars"), "Please select a data set")
    )
    switch(input$dropDownValue,
           iris = datasets::iris,
           cars = datasets::cars)
  })

  output$plot <- renderPlot({
    hist(data()[, 1])
  })
}
shinyApp(ui, server)
...