使用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
相关产品推荐
相关产品推荐

