2016-03-21 3 views
0

Я пытаюсь создать блестящее приложение, которое использует алгоритм классификации для прогнозирования переменной ответа. Там нет никаких проблем с моделью или функции predict когда работал на R. Однако, включено в блестящем, это дает следующее сообщение об ошибке:Ошибка: переменные, заданные разными типами из вставки в блестящие

Error: variables ‘X1’, ‘X2’, ‘X3’ were specified with different types from the fit.

Вот данные я создал для упрощения задачи:

data1 <- data.frame(replicate(1,sample(c("a","b"), 1000, rep = TRUE)), 
       replicate(3, sample(0:1, 1000, rep = TRUE))) 
colnames(data1)[1] <- "outcome" 

где переменный «результат» представляет собой переменную отклика, а «X1», «X2» и «X3» являются предикторами.

Модель, которую я обучил, следующая:

modelFit <- train(outcome ~ ., data = data1, method = "glm") 

Это Server.R

library(shiny) 
library(caret) 
library(shinyapps) 
shinyServer(function(input, output){ 
    modelFit <- readRDS("modelFit.Rds")  
    userdf <- data1[1,] 
    values <- reactiveValues() 
    values$df <- userdf 
    newEntry <- observe({ 
    values$df$X1 <- input$X1 
    values$df$X2 <- input$X2 
    values$df$X3 <- input$X3}) 
    output$results <- renderPrint({ 
    ds1 <- values$df 
    a <- predict(modelFit, newdata = data.frame(ds1)) 
    names(a) <- NULL 
    cat(a) 
    }) 
}) 

и UI.R является

library(shiny) 
shinyUI(fluidPage(
    tags$head(
    tags$style(HTML(" 
        @import url('//fonts.googleapis.com/css?family=Lobster|Cabin:400,700'); 
        h1 { 
        font-family: 'Lobster', cursive; 
        font-weight: 500; 
        line-height: 1.1; 
        color: #48ca3b; 
        } 
        ")) 
    ), 
# Application title 
    titlePanel(" Predictor", 
      windowTitle = "random Predictor"), 
    h5("Just for Fun"), 

    sidebarLayout(sidebarPanel(
    hr(), 
    h5('Enter parameters for prediction:'), 
    hr(), 
    selectInput("X1", 
       label = h6("Numer of Bronze Badges"), 
       choices = unique(data1$X1)), 
    selectInput("X2", 
       label = h6("Numer of Silver Badges"), 
       choices = unique(data1$X2)), 
    selectInput("X3", 
       label = h6("Numer of blue Badges"), 
       choices = unique(data1$X3)) 

), #ends sidebarPanel 

    mainPanel(
    tabsetPanel(
     tabPanel("Results", h2("The output is"), 
       h2(verbatimTextOutput("results")), 
       h2(" answers to your question."), 
       p(), "Note:" , p(), "Look for it")) 
    ) 
) 
)) 

Заранее спасибо за помощь.

ответ

2

Вы должны принудить свои input$X к целому числу.

Если вы добавите cat(str(input$X1)) к своему output$results, вы сразу увидите, что оно интерпретируется как символ, а не целое число.

Просто добавьте как. целое число, например: values$df$X1 <- as.integer(input$X1), чтобы функция предсказания работала снова, как ожидалось.

Смежные вопросы