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

使用R Shiny Modules实现多元线性回归遇变量未找到报错求助

问题原因

  • 模块服务端未定义参数接收传入的数据集,导致拟合回归时找不到data.tibble对象
  • 回归模型对象未定义为响应式变量,局部赋值的变量无法在输出渲染函数中访问
  • UI侧的输出组件ID未包裹模块命名空间,导致前后端输出绑定失败
  • 顶层应用的入参未实际传递给模块逻辑,硬编码了测试数据集

修正后可运行代码

library(shiny)
library(data.table)

Linear.Regression.UI <- function(id, data.tibble){
  ns <- NS(id)
  tagList(
    actionButton(ns("ClickforRegression"), label = "点击执行回归"),
    
    selectInput(inputId = ns("Regression.Y.Input"),
                label = "选择回归因变量Y",
                choices = names(data.tibble)
    ),
    selectInput(inputId = ns("Regression.X.Input"),
                label = "选择回归自变量X",
                choices= names(data.tibble),
                multiple=TRUE),
    
    verbatimTextOutput(ns("Linear.Model.Output.Summary"))
  )
}

Linear.Regression.Server <- function(id, data.tibble){
  moduleServer(id, function(input, output, session){
    ns <- session$ns
    
    linear.model <- eventReactive(input$ClickforRegression, {
      # 基础校验,避免未选变量时报错
      req(input$Regression.Y.Input, input$Regression.X.Input)
      lm(reformulate(input$Regression.X.Input, input$Regression.Y.Input), data = data.tibble)
    })
    
    output$Linear.Model.Output.Summary <- renderPrint({
      req(linear.model())
      summary(linear.model())
    })
    
  })
}

Regression.App <- function(data.tibble = iris){
  ui <- fluidPage(
    Linear.Regression.UI("Data", data.tibble = data.tibble)
  )
  
  server <- function(input, output, session)
  {
    Linear.Regression.Server("Data", data.tibble = data.tibble)
  }
  
  shinyApp(ui, server)
}

# 测试运行,可传入自定义data.table替换默认iris
Regression.App()

功能验证

运行代码后,选择对应的自变量和因变量,点击执行按钮即可输出线性回归的汇总结果,支持传入任意data.table/数据框类型的数据集使用。

内容的提问来源于stack exchange,提问作者K.RAC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:18:03