1

ユーザーが線形回帰モデルで 1 つ以上の独立変数を選択して結果を出力できる動的ダッシュボードを作成する R Shiny コードを取得するのに問題があります。ユーザーが 1 つの独立変数のみを入力した例をうまくたどることができましたが、複数の独立変数を使用した場合、同じ運は見つかりませんでした。何が間違っているのかわかりませんが、「モデル式に無効な項があります」というエラーが表示されます。

以下は、これまでに使用したコードです。

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)

StackOverflow で同様の投稿を読むと、問題は列名にスペースが含まれている可能性があることが示唆されているようですが、この例ではそうではありません。この問題を解決する方法がわかりません。誰かが私を正しい方向に向けるのを手伝ってくれますか? ありがとうございました!

4

1 に答える 1

2

ほら、このような問題には非常に難しい文字列操作に頼るのではなく、レシピ パッケージを使用するのが好きです。秘訣は !!! を使用することです。演算子を使用すると、凝って、ユーザーに select ヘルパーを渡せるようにすることもできます

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)
于 2020-06-14T03:36:47.673 に答える