#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"),
Здесь имена должны точно совпадать со столбцами подготовленных данных, я сделал так, чтобы они были выполнены успешно.