Блестящее приложение, принимающее пользовательский ввод и отображающее вывод линейной регрессии - PullRequest
0 голосов
/ 23 сентября 2018

Я пытался получить данные от пользователя и спрогнозировать результаты на основе линейной регрессии в блестящем приложении.Ниже приведены коды пользовательского интерфейса и сервера:

ui.R

library(shiny)
shinyUI(pageWithSidebar(

  headerPanel("House median values"),

  sidebarPanel(
    numericInput(inputId = "incomeValue",
                 label = "incomeValue",
                 min = 40, max = 160, value = 100)
  ),

  mainPanel()
))

server.R

library(shiny)
library(ISLR)

shinyServer(function(input, output) {

  newlstat = renderText({input$incomeValue})

  newPredict = data.frame(newlstat)

  modelLM = lm(medv~lstat, data = Boston)

  op = predict(modelLM, newPredict)

  output$value <- renderPrint({op})
  })

Этот код приводит к следующей ошибке в функции прогнозирования:

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  object is not a matrix

Как устранить эту ошибку и отобразить прогнозируемое значение?

1 Ответ

0 голосов
/ 23 сентября 2018

Вот ваша проблема: renderText возвращает функцию, а не значение

Browse[1]> str(newPredict)
'data.frame':   0 obs. of  1 variable:
$ lstat:function (...) 

Вот рабочий пример

library(shiny)

  ui <- fluidPage(
    pageWithSidebar(

      headerPanel("House median values"),

      sidebarPanel(
        numericInput(inputId = "incomeValue",
                     label = "incomeValue",
                     min = 40, max = 160, value = 100),
        actionButton('go',"Predict")
      ),

      mainPanel()
    )
  )

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

    data <- reactiveValues()
    observeEvent(input$go,{
      #browser()
         data$var <-input$incomeValue

         newPredict = data.frame(cyl=data$var)

         modelLM = lm(hp~cyl, data = mtcars)

         data$op = predict(modelLM, newPredict)
       })

    lstat = renderText({data$var})

    output$value <- renderPrint({data$op})
  }

  shinyApp(ui, server)
...