【问题标题】:Regression Output in ShinyShiny 中的回归输出
【发布时间】:2020-08-18 03:27:56
【问题描述】:

我正在尝试生成一个闪亮的应用程序,它允许用户选择一个因变量和自变量,然后显示一个带有结果的表格。这就是我所拥有的:


rule <- c("bb_rule", "pp_rule", "cb_rule")
dependent <- c("inning_fr", "innings_se", "inning_rain")

ui <- navbarPage(theme = shinytheme("simplex"), "App", 


                 tabPanel("Regression Results",
                          fluidPage(
                            h3("Have Rule Changes Transformed ODI Cricket?"),
                            tableOutput("regression"),
                            sidebarPanel(
                              selectInput("depInput", "Dependent Variable",
                                        choices=dependent),
                              selectInput("ruleInput", "Rule",
                                          choices=rule)
                              )
                          )) 
    )

server <- function(input, output) {

  load("./data/data.RData")

output$regression <-
    renderTable({
      data %>% 
        lm(input$depInput ~ input$ruleInput, data = .) %>%
        tidy(conf.int=TRUE) %>% 
        select(Variable = term,
               Estimate = estimate,
               `Lower Bound` = conf.low,
               `Upper Bound` = conf.high) %>%
        gt() %>% 
        tab_header(title = "Effect of Hours on Reported Approval Rating",
                   subtitle = "Data from TWT Archive")})

    })

}


shinyApp(ui = ui, server = server)

很遗憾,这不起作用,我收到一个错误消息 Error: contrasts can be applied only to factors with 2 or more levels

但是,如果我直接在服务器中输入变量名,一切正常。看来是shiny无法在回归模型中使用输入的问题。

【问题讨论】:

  • 这意味着您正在输入一个具有 1 个不同值或为 NA 的自变量。在这里查看答案:stackoverflow.com/questions/18171246/…
  • 我查过数据,不是这样的。此外,如果我将 input$depInput 和 input$ruleInput 替换为实际的变量名称,那么它可以正常工作。我认为问题可能在于闪亮没有将输入作为变量读取。但是,我不确定如何解决这个问题。
  • 如果你用lm(!! sym(input$depInput) ~ !! sym(input$ruleInput), data = .)试试呢?
  • 然后我得到错误:cannot coerce class ‘"formula"’ to a data.frame
  • 移除模型的管道。例如,fit &lt;- lm(..., data = data),然后是 tidy(fit, conf.int = TRUE) %&gt;% ...

标签: r shiny lm tidy


【解决方案1】:

@phil cmets 关于让它发挥作用是正确的。但我觉得需要更多的上下文。

通常,我们使用不带引号的变量名运行 lm

lm(formula= Sepal.Width ~ Sepal.Length, data = iris)

input$ruleinput$dep 的计算结果为 character。所以实际上,代码要求shiny 执行:

lm(formula= "Sepal.Width" ~ "Sepal.Length", data = iris)

这将导致错误。要使用 lm 中的闪亮输入,我们必须转换为符号 (sym),然后强制进行早期评估 (!!),就像 @phil 显示的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 2021-05-25
    • 2017-01-25
    • 2019-05-26
    • 2018-08-29
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多