如何解决';参数x为空';r(闪亮Web应用程序)中出错
我试图学习在R中构建一个基于机器学习的闪亮界面。我花了几个小时来解决这个“参数10是空的”错误,但不知道如何解决。我的代码遵循Github的@dataprofessor创建的结构。我将非常感谢任何建议、提示和更正。谢谢 这是我的密码:如何解决';参数x为空';r(闪亮Web应用程序)中出错,r,machine-learning,error-handling,shiny,R,Machine Learning,Error Handling,Shiny,我试图学习在R中构建一个基于机器学习的闪亮界面。我花了几个小时来解决这个“参数10是空的”错误,但不知道如何解决。我的代码遵循Github的@dataprofessor创建的结构。我将非常感谢任何建议、提示和更正。谢谢 这是我的密码: # Import libraries library(shiny) library(data.table) library(randomForest) library(caret) library(mlbench) data("Glass")
# Import libraries
library(shiny)
library(data.table)
library(randomForest)
library(caret)
library(mlbench)
data("Glass")
# Read in the RF model
model <- readRDS("model.rds")
# Training set
set.seed(345)
train.index=createDataPartition(Glass[,ncol(Glass)],p=0.7,list=FALSE)
train=Glass[train.index,]
####################################
# User interface #
####################################
ui <- pageWithSidebar(
# Page header
headerPanel('Glass type Predictor'),
# Input values
sidebarPanel(
HTML("<h3>Input parameters</h4>"),
sliderInput("RI", label = "Refractive index", value = mean(train$RI),
min = min(train$RI),
max = max(train$RI)),
sliderInput("Na", label = "Sodium", value = mean(train$Na),
min = min(train$Na),
max = max(train$Na)),
sliderInput("Mg", label = "Magnesium", value = mean(train$Mg),
min = min(train$Mg),
max = max(train$Mg)),
sliderInput("Al", label = "Aluminum", value = mean(train$Al),
min = min(train$Al),
max = max(train$Al)),
sliderInput("Si", label = "Silicon", value = mean(train$Si),
min = min(train$Si),
max = max(train$Si)),
sliderInput("K", label = "Potassium", value = mean(train$K),
min = min(train$K),
max = max(train$K)),
sliderInput("Ca", label = "Calcium", value = mean(train$Ca),
min = min(train$Ca),
max = max(train$Ca)),
sliderInput("Ba", label = "Barium", value = mean(train$Ba),
min = min(train$Ba),
max = max(train$Ba)),
sliderInput("Fe", label = "Iron", value = mean(train$Fe),
min = min(train$Fe),
max = max(train$Fe)),
actionButton("submitbutton", "Submit", class = "btn btn-primary")
),
mainPanel(
tags$label(h3('Status/Output')), # Status/Output Text Box
verbatimTextOutput('contents'),
tableOutput('tabledata') # Prediction results table
)
)
####################################
# Server #
####################################
server<- function(input, output, session) {
# Input Data
datasetInput <- reactive({
df <- data.frame(
Name = c("Refrative index",
"Sodium",
"Magnesium",
"Aluminum",
"Silicon",
"Potassium",
"Calsium",
"Barium",
"Iron"),
Value = as.character(c(input$RI,
input$Na,
input$Mg,
input$Al,
input$Si,
input$K,
input$Ca,
input$Ba,
input$Fe,)),
stringsAsFactors = FALSE)
Type <- 5
df <- rbind(df, Type)
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())
}
})
}
####################################
# Create the shiny app #
####################################
shinyApp(ui = ui, server = server)
#导入库
图书馆(闪亮)
库(数据表)
图书馆(森林)
图书馆(插入符号)
图书馆(mlbench)
数据(“玻璃”)
#读入射频模型
模型最初的问题是由输入$Fe
后的假逗号引起的。这导致了第二个问题,原因是代码所需的测试
数据帧的名称与从输入值构造数据帧的名称不匹配。在构建模型时,我还需要添加对库(插入符号)
的调用。它现在运行,我可以看到Type
正在被传递到预测调用中。不知道为什么
这是必需的,因为预测试图产生类型,所以我删除了它。我还删除了input.csv
文件的创建,只是直接创建了测试数据帧
这是完整的app.R
library(shiny)
library(data.table)
library(randomForest)
library(caret)
library(mlbench)
data("Glass")
# Read in the RF model
model <- readRDS("model.rds")
# Training set
set.seed(345)
train.index=createDataPartition(Glass[,ncol(Glass)],p=0.7,list=FALSE)
train=Glass[train.index,]
####################################
# User interface #
####################################
ui <- pageWithSidebar(
# Page header
headerPanel('Glass type Predictor'),
# Input values
sidebarPanel(
HTML("<h3>Input parameters</h3>"),
sliderInput("RI", label = "Refractive index", value = mean(train$RI),
min = min(train$RI),
max = max(train$RI)),
sliderInput("Na", label = "Sodium", value = mean(train$Na),
min = min(train$Na),
max = max(train$Na)),
sliderInput("Mg", label = "Magnesium", value = mean(train$Mg),
min = min(train$Mg),
max = max(train$Mg)),
sliderInput("Al", label = "Aluminum", value = mean(train$Al),
min = min(train$Al),
max = max(train$Al)),
sliderInput("Si", label = "Silicon", value = mean(train$Si),
min = min(train$Si),
max = max(train$Si)),
sliderInput("K", label = "Potassium", value = mean(train$K),
min = min(train$K),
max = max(train$K)),
sliderInput("Ca", label = "Calcium", value = mean(train$Ca),
min = min(train$Ca),
max = max(train$Ca)),
sliderInput("Ba", label = "Barium", value = mean(train$Ba),
min = min(train$Ba),
max = max(train$Ba)),
sliderInput("Fe", label = "Iron", value = mean(train$Fe),
min = min(train$Fe),
max = max(train$Fe)),
actionButton("submitbutton", "Submit", class = "btn btn-primary")
),
mainPanel(
tags$label(h3('Status/Output')), # Status/Output Text Box
verbatimTextOutput('contents'),
tableOutput('tabledata') # Prediction results table
)
)
####################################
# Server #
####################################
server<- function(input, output, session) {
# Input Data
datasetInput <- reactive({
df <- data.frame(
Name = c("RI",
"Na",
"Mg",
"Al",
"Si",
"K",
"Ca",
"Ba",
"Fe"),
Value = as.character(c(input$RI,
input$Na,
input$Mg,
input$Al,
input$Si,
input$K,
input$Ca,
input$Ba,
input$Fe)),
stringsAsFactors = FALSE)
input <- transpose(df)
test = input[2,]
names(test) = as.character(input[1,])
Output <- data.frame(Prediction=predict(model,test), round(predict(model,test,type="prob"), 3))
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())
}
})
}
####################################
# Create the shiny app #
####################################
shinyApp(ui = ui, server = server)
库(闪亮)
库(数据表)
图书馆(森林)
图书馆(插入符号)
图书馆(mlbench)
数据(“玻璃”)
#读入射频模型
为文件model.rds
中的内容建模。这是一个随机林模型。没有它,代码无法运行。你能找到一个可以复制的例子吗?谢谢你的帮助。我已经更新了问题,model.RDS的代码可以在闪亮的代码下面找到。非常感谢Andrew!我真的很感激。
library(shiny)
library(data.table)
library(randomForest)
library(caret)
library(mlbench)
data("Glass")
# Read in the RF model
model <- readRDS("model.rds")
# Training set
set.seed(345)
train.index=createDataPartition(Glass[,ncol(Glass)],p=0.7,list=FALSE)
train=Glass[train.index,]
####################################
# User interface #
####################################
ui <- pageWithSidebar(
# Page header
headerPanel('Glass type Predictor'),
# Input values
sidebarPanel(
HTML("<h3>Input parameters</h3>"),
sliderInput("RI", label = "Refractive index", value = mean(train$RI),
min = min(train$RI),
max = max(train$RI)),
sliderInput("Na", label = "Sodium", value = mean(train$Na),
min = min(train$Na),
max = max(train$Na)),
sliderInput("Mg", label = "Magnesium", value = mean(train$Mg),
min = min(train$Mg),
max = max(train$Mg)),
sliderInput("Al", label = "Aluminum", value = mean(train$Al),
min = min(train$Al),
max = max(train$Al)),
sliderInput("Si", label = "Silicon", value = mean(train$Si),
min = min(train$Si),
max = max(train$Si)),
sliderInput("K", label = "Potassium", value = mean(train$K),
min = min(train$K),
max = max(train$K)),
sliderInput("Ca", label = "Calcium", value = mean(train$Ca),
min = min(train$Ca),
max = max(train$Ca)),
sliderInput("Ba", label = "Barium", value = mean(train$Ba),
min = min(train$Ba),
max = max(train$Ba)),
sliderInput("Fe", label = "Iron", value = mean(train$Fe),
min = min(train$Fe),
max = max(train$Fe)),
actionButton("submitbutton", "Submit", class = "btn btn-primary")
),
mainPanel(
tags$label(h3('Status/Output')), # Status/Output Text Box
verbatimTextOutput('contents'),
tableOutput('tabledata') # Prediction results table
)
)
####################################
# Server #
####################################
server<- function(input, output, session) {
# Input Data
datasetInput <- reactive({
df <- data.frame(
Name = c("RI",
"Na",
"Mg",
"Al",
"Si",
"K",
"Ca",
"Ba",
"Fe"),
Value = as.character(c(input$RI,
input$Na,
input$Mg,
input$Al,
input$Si,
input$K,
input$Ca,
input$Ba,
input$Fe)),
stringsAsFactors = FALSE)
input <- transpose(df)
test = input[2,]
names(test) = as.character(input[1,])
Output <- data.frame(Prediction=predict(model,test), round(predict(model,test,type="prob"), 3))
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())
}
})
}
####################################
# Create the shiny app #
####################################
shinyApp(ui = ui, server = server)