Не имея под рукой каких-либо данных для воспроизведения вашего приложения, трудно обнаружить ошибку и сделать ее скорее игрой в догадки.
Так что мое первое предположение заключается в том, что вы не справляетесь с реактивностью вваше приложение правильно.Ваш рендер * функции вызывают реактивные значения, но когда не было загружено ни одного файла и не было выбрано никакого Регрессора, нет данных для работы, поэтому он выдаст ошибку.Я бы предложил проверить блестящие принципы реактивности и функции 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)