R Studio Shiny App Error: object 'Variable(carat)' not found
R Studio Shiny App Error: object 'Variable(carat)' not found
我正在尝试开发一个闪亮的应用程序,以使用 R 上的“钻石”数据来预测基于克拉的钻石价格。除绘图部分外,一切正常,returns 一个错误:对象“克拉”未找到。该代码似乎在闪亮之外工作,所以我猜问题出在将数据集读入闪亮服务器。我是 shiny 的新手,我在这里探索过类似的问题,结果很短,我想知道我做错了什么。我试图在此查询中附加错误图像和预期输出。谢谢!
library(shiny)
library(ggplot2) ## Added as the diamonds data is under this package
data("diamonds") ## load data into the code
diamonds <- as.data.frame(diamonds) ## Added to explicitly read the data into the code
carat <- diamonds$carat ## Added to explicitly create the variable carat as a workaround the issue
# Define UI for application that predicts the price of diamonds from its carat and plots linear models using the diamonds data on R
shinyUI(fluidPage(
titlePanel("Predict Price of Diamond from its Carat"),
sidebarLayout(
sidebarPanel(
sliderInput("sliderCarat", "What is the Carat of the diamond?", min = 0.2, max = 5.01, value = 3),
checkboxInput("showModel1", "Show/Hide Model 1", value = TRUE),
checkboxInput("showModel2", "Show/Hide Model 2", value = TRUE),
checkboxInput("showModel3", "Show/Hide Model 3", value = TRUE)
),
mainPanel(
plotOutput("plot1"),
h3("Predicted Price from Model 1:"),
textOutput("pred1"),
h3("Predicted Price from Model 2:"),
textOutput("pred2"),
h3("Predicted Price from Model 3:"),
textOutput("pred3")
)
)
))
shinyServer(function(input, output) {
## Model Generation: server.R Part 1
model1 <- lm(price ~ carat, data = diamonds)
model2 <- lm(price ~ carat + cut + color, data = diamonds)
model3 <- lm(price ~ carat + depth + table, data = diamonds)
model1pred <- reactive({
caratInput <- input$sliderCarat
predict(model1, newdata = data.frame(caratInput))
})
model2pred <- reactive({
caratInput <- input$sliderCarat
predict(model2, newdata = data.frame(caratInput))
})
model3pred <- reactive({
caratInput <- input$sliderCarat
predict(model3, newdata = data.frame(caratInput))
})
## Price Prediction: server.R Part 2
output$plot1 <- renderPlot({
caratInput <- input$sliderCarat
plot(diamonds$carat, diamonds$price, xlab = "Weight of the Diamond in Carat",
ylab = "Price in USD", bty = "n", pch = 16, xlim = c(0.2, 5.1), ylim = c(326, 18823))
if(input$showModel1){
abline(model1, col = "red", lwd = 2)
}
if(input$showModel2){
abline(model2, col = "blue", lwd = 2)
}
if(input$showModel3){
abline(model3, col = "green", lwd = 2)
}
legend(25, 250, c("Model 1 Prediction", "Model 2 Prediction", "Model 3 Prediction"), pch = 16,
col = c("red", "blue", "green"), bty = "n", cex = 1.2)
points(caratInput, model1pred(), col = "red", pch = 16, cex = 2)
points(caratInput, model2pred(), col = "blue", pch = 16, cex = 2)
points(caratInput, model3pred(), col = "green", pch = 16, cex = 2)
})
output$pred1 <- renderText({
model1pred()
})
output$pred2 <- renderText({
model2pred()
})
output$pred3 <- renderText({
model3pred()
})
})
shinyApp(ui = ui, server = server)
结果:
预期结果:
问题在于您如何为预测定义新数据。由于您在模型的公式中指定了 carat
,因此新的 data.frame 也需要包含此列。
尝试
model1pred <- reactive({
caratInput <- input$sliderCarat
predict(model1, newdata = data.frame(carat = caratInput))
})
(以及其他预测)。
我正在尝试开发一个闪亮的应用程序,以使用 R 上的“钻石”数据来预测基于克拉的钻石价格。除绘图部分外,一切正常,returns 一个错误:对象“克拉”未找到。该代码似乎在闪亮之外工作,所以我猜问题出在将数据集读入闪亮服务器。我是 shiny 的新手,我在这里探索过类似的问题,结果很短,我想知道我做错了什么。我试图在此查询中附加错误图像和预期输出。谢谢!
library(shiny)
library(ggplot2) ## Added as the diamonds data is under this package
data("diamonds") ## load data into the code
diamonds <- as.data.frame(diamonds) ## Added to explicitly read the data into the code
carat <- diamonds$carat ## Added to explicitly create the variable carat as a workaround the issue
# Define UI for application that predicts the price of diamonds from its carat and plots linear models using the diamonds data on R
shinyUI(fluidPage(
titlePanel("Predict Price of Diamond from its Carat"),
sidebarLayout(
sidebarPanel(
sliderInput("sliderCarat", "What is the Carat of the diamond?", min = 0.2, max = 5.01, value = 3),
checkboxInput("showModel1", "Show/Hide Model 1", value = TRUE),
checkboxInput("showModel2", "Show/Hide Model 2", value = TRUE),
checkboxInput("showModel3", "Show/Hide Model 3", value = TRUE)
),
mainPanel(
plotOutput("plot1"),
h3("Predicted Price from Model 1:"),
textOutput("pred1"),
h3("Predicted Price from Model 2:"),
textOutput("pred2"),
h3("Predicted Price from Model 3:"),
textOutput("pred3")
)
)
))
shinyServer(function(input, output) {
## Model Generation: server.R Part 1
model1 <- lm(price ~ carat, data = diamonds)
model2 <- lm(price ~ carat + cut + color, data = diamonds)
model3 <- lm(price ~ carat + depth + table, data = diamonds)
model1pred <- reactive({
caratInput <- input$sliderCarat
predict(model1, newdata = data.frame(caratInput))
})
model2pred <- reactive({
caratInput <- input$sliderCarat
predict(model2, newdata = data.frame(caratInput))
})
model3pred <- reactive({
caratInput <- input$sliderCarat
predict(model3, newdata = data.frame(caratInput))
})
## Price Prediction: server.R Part 2
output$plot1 <- renderPlot({
caratInput <- input$sliderCarat
plot(diamonds$carat, diamonds$price, xlab = "Weight of the Diamond in Carat",
ylab = "Price in USD", bty = "n", pch = 16, xlim = c(0.2, 5.1), ylim = c(326, 18823))
if(input$showModel1){
abline(model1, col = "red", lwd = 2)
}
if(input$showModel2){
abline(model2, col = "blue", lwd = 2)
}
if(input$showModel3){
abline(model3, col = "green", lwd = 2)
}
legend(25, 250, c("Model 1 Prediction", "Model 2 Prediction", "Model 3 Prediction"), pch = 16,
col = c("red", "blue", "green"), bty = "n", cex = 1.2)
points(caratInput, model1pred(), col = "red", pch = 16, cex = 2)
points(caratInput, model2pred(), col = "blue", pch = 16, cex = 2)
points(caratInput, model3pred(), col = "green", pch = 16, cex = 2)
})
output$pred1 <- renderText({
model1pred()
})
output$pred2 <- renderText({
model2pred()
})
output$pred3 <- renderText({
model3pred()
})
})
shinyApp(ui = ui, server = server)
结果:
预期结果:
问题在于您如何为预测定义新数据。由于您在模型的公式中指定了 carat
,因此新的 data.frame 也需要包含此列。
尝试
model1pred <- reactive({
caratInput <- input$sliderCarat
predict(model1, newdata = data.frame(carat = caratInput))
})
(以及其他预测)。