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

能否用mapply拟合不同回归模型?iris数据集实操报错求助

使用mapply在iris数据集上拟合多个回归模型的问题解决

你好呀,这个目标完全可以实现!你遇到的错误是因为把lm的data参数错误地塞进了公式字符串里,导致语法解析失败。

错误原因分析

你原来的代码里,用paste0生成的字符串是类似"Sepal.Length~Sepal.Width,data=iris",但lm函数的语法是lm(formula, data = ...)——公式部分只需要因变量~自变量,data是独立的参数,不能和公式混在一起拼接,所以parse函数会把逗号当成公式里的非法字符,就出现了unexpected ','的错误。

修正后的实现步骤

这里给你两种简洁的修正方式,选哪种都可以:

方式一:用reformulate动态创建公式(推荐,更直观)

  1. 重新定义回归函数:

    reg <- function(dependent, independent) {
      # reformulate(自变量, 响应变量) 会自动生成正确的公式
      lm(reformulate(independent, response = dependent), data = iris)
    }
    
  2. 保留你原来的变量定义:

    dependent <- c("Sepal.Length", "Sepal.Width")
    independent <- c("Sepal.Width", "Sepal.Length") # 按你的需求保留自变量顺序
    
  3. 调用mapply(记得加SIMPLIFY = FALSE来保留每个模型的完整结构):

    models_reg <- mapply(reg, dependent, independent, SIMPLIFY = FALSE)
    

方式二:用as.formula正确拼接公式

如果你习惯用paste拼接的方式,只要把data参数单独传递就行:

reg <- function(dependent, independent) {
  lm(as.formula(paste0(dependent, "~", independent)), data = iris)
}

后面的变量定义和mapply调用和方式一一致。

验证结果

运行后,你可以通过models_reg[[1]]查看第一个回归模型(Sepal.Length ~ Sepal.Width)的结果,models_reg[[2]]查看第二个模型(Sepal.Width ~ Sepal.Length)的结果,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:17:41