Ошибка приложения R Shiny Ошибка при оценке: объект «возраст» не найден

#r #shiny #shinyapps

#r #блестящий #блестящие приложения #shinyapps

Вопрос:

Я пытаюсь создать приложение с использованием shiny, которое использует классификационную модель (svm) для прогнозирования результата. Но я продолжаю получать эту ошибку: ошибка при оценке: объект «возраст» не найден

Пользовательский интерфейс и серверный код:

 library(shiny)
library(data.table)
library(caret)
library(caretEnsemble)
library(shinythemes)

model <- readRDS("model.rds")
    

ui <- pageWithSidebar(
  headerPanel('Heart disease predictor'),
  sidebarPanel(
    tags$label(h3('Input parameters')),
    numericInput("age", label = "Age", value = 40),
    numericInput("sex", label = "Sex", value = 1),
    numericInput("chest.pain", label = "Chest pain", value = 1),
    numericInput("resting.BP", label = "resting Bp", value = 120),
    numericInput('cholesterol', label = 'Cholesterol', value = 170),
    numericInput('fasting.sugar', label = 'Fasting Sugar', value = 1),
    numericInput('ECG.at.rest', label = 'ECG at rest', value=1),
    numericInput('max.hear.rate', label = 'Max heart rate', value = 120),
    numericInput('exercisal.angina', label = 'Excercise induced angina', value = 0),
    numericInput('ST.segments', label = 'ST segments', value = 1.5),
    numericInput('slope.of.ST', label = 'slope of ST segment', value = 1),
    numericInput('number.of.vessels', label = 'number of coronary artery', value = 3),
    numericInput('thalassemia', label = 'thalassemia', value = 2),
    
    actionButton("submitbutton", "Submit", class = "btn btn-primary")
  ),
  mainPanel(
    tags$label(h3('Status/Output')), 
    verbatimTextOutput('contents'),
    tableOutput('tabledata')
    )
)


server<- function(input, output) {
  datasetInput <- reactive({  
    df <- data.frame(
      Name = c("Age",
               "Sex",
               "Chest pain",
               "resting Bp",
               "Cholesterol",
               "Fasting Sugar",
               "ECG at rest",
               "Max heart rate",
               "Excercise induced angina",
               "ST segments",
               "slope of ST segment",
               "number of coronary artery",
               "thalassemia"),
      Value = as.character(c(input$age,
                             input$sex,
                             input$chest.pain,
                             input$resting.BP,
                             input$cholesterol,
                             input$fasting.sugar,
                             input$ECG.at.rest,
                             input$max.hear.rate,
                             input$exercisal.angina,
                             input$ST.segments,
                             input$slope.of.ST,
                             input$number.of.vessels,
                             input$thalassemia)),
      stringsAsFactors = FALSE)
    
    target<- 0
    df <- rbind(df, target)
    input <- transpose(df)
    write.table(input,"input.csv", sep=",", quote = FALSE, row.names = FALSE, col.names = FALSE)
    
    test <- read.csv(paste("input", ".csv", sep=""), header = TRUE)
    
    Output <- data.frame(Prediction=predict(model,test), round(predict(model,test,type="prob"), 3))
    print(Output)
    
  })
  
  # Status/Output Text Box
  output$contents <- renderPrint({
    if (input$submitbutton>0) { 
      isolate("Calculation complete.") 
    } else {
      return("Server is ready for calculation.")
    }
  })
  
  # Prediction results table
  output$tabledata <- renderTable({
    if (input$submitbutton>0) { 
      isolate(datasetInput()) 
    } 
  })
  
}

shinyApp(ui = ui, server = server)
  

Я новичок в этой области, и это мое первое приложение, которое я создаю. Попытался пройти блестящий учебник, но все же я не смог устранить эту ошибку.
Что я сделал не так?

Комментарии:

1. Попробуйте использовать req() . То есть req(input$age) , req(input$sex) , и так далее.

Ответ №1:

Когда я заменил Output <- data.frame(Prediction=predict(model,test), round(predict(model,test,type="prob"), 3)) на Output <- data.frame(test) , он работал нормально. Итак, ошибка возникает при predict(model,test) .

Без model.rds предоставленного объекта это все, на что я могу посмотреть.

Комментарии:

1. predict(model, test) в основном прогнозирует результат

Ответ №2:

После внесения нескольких изменений я решил эту ошибку:

 server<- function(input, output) {
  datasetInput <- reactive({  
    df <- data.frame(
      Name = c("Age",
               "Sex",
               "Chest pain",
               "resting Bp",
               "Cholesterol",
               "Fasting Sugar",
               "ECG at rest",
               "Max heart rate",
               "Excercise induced angina",
               "ST segments",
               "slope of ST segment",
               "number of coronary artery",
               "thalassemia"),
  

Здесь имена должны точно совпадать со столбцами подготовленных данных, я сделал так, чтобы они были выполнены успешно.