Reputation: 195
I was trying to take input from user and predict the output based on linear regression in a shiny application. Please find below the Ui and server codes :
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})
})
This code results in following error in predict function :
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
object is not a matrix
How to resolve this error and display predicted value ?
Upvotes: 0
Views: 930
Reputation: 13135
Here is your problem as renderText
return a function not a value
Browse[1]> str(newPredict)
'data.frame': 0 obs. of 1 variable:
$ lstat:function (...)
Here is a working example
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)
Upvotes: 1