Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决';参数x为空';r(闪亮Web应用程序)中出错_R_Machine Learning_Error Handling_Shiny - Fatal编程技术网

如何解决';参数x为空';r(闪亮Web应用程序)中出错

如何解决';参数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")

我试图学习在R中构建一个基于机器学习的闪亮界面。我花了几个小时来解决这个“参数10是空的”错误,但不知道如何解决。我的代码遵循Github的@dataprofessor创建的结构。我将非常感谢任何建议、提示和更正。谢谢

这是我的密码:

# 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)