如何解决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
相关产品推荐
相关产品推荐

