使用 R Shiny 进行多元线性回归(SelectInput --> multiple=TRUE)
Using R Shiny for Multiple Linear Regression (SelectInput --> multiple=TRUE)
我在让我的 R Shiny 代码生成动态仪表板时遇到了一些问题,用户可以在其中 select 线性回归模型中的 1 个或多个自变量并打印结果。我已经能够成功地遵循用户只输入一个自变量的示例,但是对于多个自变量,我没有找到同样的运气。我不确定我做错了什么,但我收到一条错误消息 "invalid term in model formula".
以下是我目前使用的代码:
library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)
#data(mtcars)
AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")
# Define UI for application
ui = fluidPage(
navbarPage("R Shiny Dashboard",
tabPanel("Welcome",
tabName = "welcome",
icon=icon("door-open"),
fluidPage(theme=shinytheme("cerulean"),
h1("Welcome to my Shiny Dashboard!"),
br(),
p(strong(tags$u("What is this dashboard all about?"))),
p("I'm going to do stuff."),
br(),
p(strong(tags$u("Here's another question."))),
p("Here's my answer."),
br(),
p(strong(tags$u("How can I use this dashboard?"))),
p("You can click on any of the tabs above to see a different analysis of the data.")
)),
tabPanel("Regression",
tabname="regression",
icon=icon("calculator"),
selectInput(inputId = "indep", label = "Independent Variables",
multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
verbatimTextOutput(outputId = "RegOut")
)
))
# Define server logic
server <- function(input, output) {
#-------------------REGRESSION-------------------#
lm_reg <- reactive(
lm(as.formula(paste(mtcars$mpg," ~ ",paste(input$indep,collapse="+"))),data=CFD)
)
output$RegOut = renderPrint({summary(lm_reg())})
}
# Run the application
shinyApp(ui = ui, server = server)
阅读 Whosebug 上的类似帖子似乎表明问题可能出在列名中有空格,但在此示例中并非如此。我不确定如何解决这个问题。谁能帮我指出正确的方向?谢谢!
给你,我喜欢使用 recipe 包来解决这样的问题,而不是依赖非常困难的字符串操作,诀窍是使用 !!!运算符,你甚至可以花哨的让用户传递一些 select helpers
library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)
library(recipes)
#data(mtcars)
AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")
# Define UI for application
ui = fluidPage(
navbarPage("R Shiny Dashboard",
tabPanel("Welcome",
tabName = "welcome",
icon=icon("door-open"),
fluidPage(theme=shinytheme("cerulean"),
h1("Welcome to my Shiny Dashboard!"),
br(),
p(strong(tags$u("What is this dashboard all about?"))),
p("I'm going to do stuff."),
br(),
p(strong(tags$u("Here's another question."))),
p("Here's my answer."),
br(),
p(strong(tags$u("How can I use this dashboard?"))),
p("You can click on any of the tabs above to see a different analysis of the data.")
)),
tabPanel("Regression",
tabname="regression",
icon=icon("calculator"),
selectInput(inputId = "indep", label = "Independent Variables",
multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
verbatimTextOutput(outputId = "RegOut")
)
))
# Define server logic
server <- function(input, output) {
#-------------------REGRESSION-------------------#
recipe_formula <- reactive(mtcars %>%
recipe() %>%
update_role(mpg,new_role = "outcome") %>%
update_role(!!!input$indep,new_role = "predictor") %>%
formula())
lm_reg <- reactive(
lm(recipe_formula(),data = mtcars)
)
output$RegOut = renderPrint({summary(lm_reg())})
}
# Run the application
shinyApp(ui = ui, server = server)
我在让我的 R Shiny 代码生成动态仪表板时遇到了一些问题,用户可以在其中 select 线性回归模型中的 1 个或多个自变量并打印结果。我已经能够成功地遵循用户只输入一个自变量的示例,但是对于多个自变量,我没有找到同样的运气。我不确定我做错了什么,但我收到一条错误消息 "invalid term in model formula".
以下是我目前使用的代码:
library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)
#data(mtcars)
AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")
# Define UI for application
ui = fluidPage(
navbarPage("R Shiny Dashboard",
tabPanel("Welcome",
tabName = "welcome",
icon=icon("door-open"),
fluidPage(theme=shinytheme("cerulean"),
h1("Welcome to my Shiny Dashboard!"),
br(),
p(strong(tags$u("What is this dashboard all about?"))),
p("I'm going to do stuff."),
br(),
p(strong(tags$u("Here's another question."))),
p("Here's my answer."),
br(),
p(strong(tags$u("How can I use this dashboard?"))),
p("You can click on any of the tabs above to see a different analysis of the data.")
)),
tabPanel("Regression",
tabname="regression",
icon=icon("calculator"),
selectInput(inputId = "indep", label = "Independent Variables",
multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
verbatimTextOutput(outputId = "RegOut")
)
))
# Define server logic
server <- function(input, output) {
#-------------------REGRESSION-------------------#
lm_reg <- reactive(
lm(as.formula(paste(mtcars$mpg," ~ ",paste(input$indep,collapse="+"))),data=CFD)
)
output$RegOut = renderPrint({summary(lm_reg())})
}
# Run the application
shinyApp(ui = ui, server = server)
阅读 Whosebug 上的类似帖子似乎表明问题可能出在列名中有空格,但在此示例中并非如此。我不确定如何解决这个问题。谁能帮我指出正确的方向?谢谢!
给你,我喜欢使用 recipe 包来解决这样的问题,而不是依赖非常困难的字符串操作,诀窍是使用 !!!运算符,你甚至可以花哨的让用户传递一些 select helpers
library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)
library(recipes)
#data(mtcars)
AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")
# Define UI for application
ui = fluidPage(
navbarPage("R Shiny Dashboard",
tabPanel("Welcome",
tabName = "welcome",
icon=icon("door-open"),
fluidPage(theme=shinytheme("cerulean"),
h1("Welcome to my Shiny Dashboard!"),
br(),
p(strong(tags$u("What is this dashboard all about?"))),
p("I'm going to do stuff."),
br(),
p(strong(tags$u("Here's another question."))),
p("Here's my answer."),
br(),
p(strong(tags$u("How can I use this dashboard?"))),
p("You can click on any of the tabs above to see a different analysis of the data.")
)),
tabPanel("Regression",
tabname="regression",
icon=icon("calculator"),
selectInput(inputId = "indep", label = "Independent Variables",
multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
verbatimTextOutput(outputId = "RegOut")
)
))
# Define server logic
server <- function(input, output) {
#-------------------REGRESSION-------------------#
recipe_formula <- reactive(mtcars %>%
recipe() %>%
update_role(mpg,new_role = "outcome") %>%
update_role(!!!input$indep,new_role = "predictor") %>%
formula())
lm_reg <- reactive(
lm(recipe_formula(),data = mtcars)
)
output$RegOut = renderPrint({summary(lm_reg())})
}
# Run the application
shinyApp(ui = ui, server = server)