получение ошибки: не допускается чтение объектов из объекта светового выхода - модель множественной линейной регрессии - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в Rshiny, не знаю, что я делаю неправильно. По сути, я хочу построить модель множественной линейной регрессии, которая может прогнозировать значения выгруженного файла на основе сборки модели на наборе данных mtcars.Это также должно позволить пользователю выбирать независимые переменные.Однако, когда я делаю это, то выдает ошибку: - Чтение объектов из объекта светового выхода не разрешено

Пожалуйста, найдите под кодом:

library(shiny)
library(datasets)
library(caret)
library(shiny)
library(curl)

library(shiny)

ui <- fluidPage(
  titlePanel("My first predictive model"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv', 
                         'text/comma-separated-values,text/plain', 
                         '.csv')),
      tags$hr(),
      uiOutput("dependent"),
      uiOutput("independents"),
      tags$hr(),
      actionButton("action", "Predict!")
    ),
    mainPanel(
      verbatimTextOutput("summary1")
    )
  )
)

server <- function(input, output, session) {
  filedata <- reactive({
    infile <- input$file1
    if (is.null(infile)){
      return(NULL)      
    }
    read.csv(infile$datapath)
  })

  output$dependent <- renderUI({
    df <- filedata()
    if (is.null(df)) return(NULL)
    items=names(df)
    names(items)=items
    selectInput("dependent","Select ONE variable as dependent variable from:",items)
  })
 output$independents <- renderUI({
 df <- filedata()
 if (is.null(df)) return(NULL)
 checkboxGroupInput('independents','Select the regressors', choices = names(df))
 })
 #regression formula
 regformula <- reactive({
   as.formula(paste(mpg,'~',output$independents))
 })
 #model
 output$summary1 <- renderPrint({
   input$action
   modelq <- lm(regformula(),data=mtcars)
   pred1<-predict(modelq,df)
   summary(modelq())
   pred1
   })
}


shinyApp(ui, server)

1 Ответ

0 голосов
/ 21 мая 2018

Не имея под рукой каких-либо данных для воспроизведения вашего приложения, трудно обнаружить ошибку и сделать ее скорее игрой в догадки.

Так что мое первое предположение заключается в том, что вы не справляетесь с реактивностью вваше приложение правильно.Ваш рендер * функции вызывают реактивные значения, но когда не было загружено ни одного файла и не было выбрано никакого Регрессора, нет данных для работы, поэтому он выдаст ошибку.Я бы предложил проверить блестящие принципы реактивности и функции observeEvent, req, validate.

. Затем вы можете удалить строки с помощью is.null(*), как функция req() делает это для вас.

Следующая мысль, что такое mpg?И я думаю, что вы должны также изменить summary(modelq()) на summary(modelq), так как вы просто хотите напечатать сводку объекта, а не вызывать объект.

Достаточно один раз позвонить library(shiny).;)

В прогнозе вы также вызываете df, который не назначен в этой функции.Я добавил объект reactiveValues, где вы можете сохранять другие объекты реактивным способом.И в вашем втором renderUI мы добавляем данные к объекту реагирующего значения, как это df$file <- df.А в функции prediticion вы можете вызывать данные вот так predict(modelq,df$file).

Я также изменил regformula на eventReactive (), который будет выполняться при каждом нажатии кнопки действия.

И наконец, я изменил создание формул на as.formula(paste("mpg",'~',paste(input$independents, collapse= "+"))), так как если вы вызываете только input $ Независимые, он принимает только первый аргумент.

library(shiny)
library(datasets)
library(caret)
library(curl)

ui <- fluidPage(
  titlePanel("My first predictive model"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv', 
                         'text/comma-separated-values,text/plain', 
                         '.csv')),
      tags$hr(),
      verbatimTextOutput("smp"),
      uiOutput("dependent"),
      uiOutput("independents"),
      tags$hr(),
      actionButton("action", "Predict!")
    ),
    mainPanel(
      verbatimTextOutput("summary1")
    )
  )
)

server <- function(input, output, session) {
  filedata <- reactive({
    infile <- input$file1
    read.csv(infile$datapath)
  })

  df <- reactiveValues(file = NULL)

  output$dependent <- renderUI({
    req(input$file1)
    df <- filedata()
    items=names(df)
    names(items)=items
    selectInput("dependent","Select ONE variable as dependent variable from:",items)
  })
  output$independents <- renderUI({
    req(input$file1)
    df <- filedata()

    df$file <- df

    checkboxGroupInput('independents','Select the regressors', choices = names(df))
  })
  #regression formula
  regformula <- eventReactive(input$action, {
    as.formula(paste("mpg",'~',paste(input$independents, collapse= "+")))
  })
  #model

  output$summary1 <- renderPrint({
    req(regformula())
    req(input$file1)

    modelq <- lm(regformula(),data=mtcars)

    df <- filedata()

    pred1<-predict(modelq,df); 
    names <- df$X

    data.frame(X = as.character(names), Prediction = pred1)
  })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...