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

R 4.1.0下针对距离矩阵的Linear model(lm)运行报错该如何处理

问题原因

这不是R 4.1.0的未公开变更,是此前版本对不规范输入的隐式兼容被取消导致的报错:

  • lm()的标准用法要求公式两侧的输入为向量或数据框列,你直接传入距离矩阵(尤其是dist类的紧凑三角矩阵)属于不规范输入
  • R 4.1.0之前的版本会自动将单维度的类矩阵对象隐式转换为向量传入模型,4.1.0对模型输入的维度校验做了严格化,要求公式中的矩阵类输入必须符合多变量模型的维度要求,单个距离矩阵不符合该要求,因此抛出维度错误。

修复方案

情况1:Dgen、Dgeo均为R原生dist类对象

直接主动将其转换为数值向量即可:

model <- lm(as.numeric(Dgen) ~ as.numeric(Dgeo))

情况2:Dgen为完整对称矩阵、Dgeo为存储为矩阵格式的三角矩阵

先提取非冗余的下三角成对距离值(排除无意义的对角线0值)再拟合:

# 提取非冗余成对距离,diag=FALSE表示排除对角线
dgen_vec <- Dgen[lower.tri(Dgen, diag = FALSE)]
dgeo_vec <- Dgeo[lower.tri(Dgeo, diag = FALSE)]
model <- lm(dgen_vec ~ dgeo_vec)

拟合得到的model可直接传入abline()使用,和此前的计算结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:06:02