You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决R Shiny中构建lm模型时出现的‘找不到函数master’错误?

解决Shiny中响应式对象在olsrr函数里的报错问题

问题原因

olsrr::ols_step_both_p函数在内部会重新解析和评估模型公式,它默认的运行环境无法访问Shiny服务器函数里的响应式对象master(),因此出现"could not find function 'master'"的错误。

解决方案1:先将响应式数据赋值给临时变量

在model2的反应式表达式里,先把master()的结果存到局部变量中,再将这个变量作为data参数传入lm,确保ols_step_both_p内部能找到数据:

library(shiny)
library(shinydashboard)
library(olsrr) # 显式加载olsrr包

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    verbatimTextOutput("txt1"),
    verbatimTextOutput("txt2")
  )
)

server <- function(input, output) {
  
  master <- reactive({
    mtcars
  })
  
  model1 <- reactive({
    ols_step_both_p(lm(hp~.,data = mtcars))
  })
  
  model2 <- reactive({
    # 把响应式数据存到局部变量
    data <- master()
    ols_step_both_p(lm(hp~.,data = data))
  })
  
  output$txt1 <- renderPrint({
    summary(model1()$model)
  })
  
  output$txt2 <- renderPrint({
    summary(model2()$model)
  })
  
}

shinyApp(ui, server)

解决方案2:使用with()指定评估环境

通过with()函数让lm的公式在响应式数据的环境里评估,避免ols_step_both_p内部找不到数据的问题:

library(shiny)
library(shinydashboard)
library(olsrr)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    verbatimTextOutput("txt1"),
    verbatimTextOutput("txt2")
  )
)

server <- function(input, output) {
  
  master <- reactive({
    mtcars
  })
  
  model1 <- reactive({
    ols_step_both_p(lm(hp~.,data = mtcars))
  })
  
  model2 <- reactive({
    ols_step_both_p(with(master(), lm(hp~.)))
  })
  
  output$txt1 <- renderPrint({
    summary(model1()$model)
  })
  
  output$txt2 <- renderPrint({
    summary(model2()$model)
  })
  
}

shinyApp(ui, server)

额外提醒

一定要显式加载olsrr包,原代码未包含这一行,虽然全局环境可能已加载,但在Shiny应用中显式加载能避免潜在的依赖问题。

内容的提问来源于stack exchange,提问作者youraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:25:17