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

R中两列表外观一致却不相等及model.matrix报错问题排查

问题出在这

手动敲的~B1这种表达式,R会自动把它转成formula类对象,还会自动生成terms属性——这正是model.matrix运行必须的元数据。但你用substitute生成的结果,只是个语言对象(call/language类型),虽然表面看表达式一模一样,但既没formula的类标识,也缺terms属性,所以identical不认它,model.matrix也会报错。

改一行代码就行

生成列表c的时候,把substitute的结果用as.formula()包一下,让R把它转成正经的formula对象,自动补上需要的属性:

# 修改后的c生成代码
c <- lapply(a, \(x) as.formula(do.call(substitute, list(x, f(b, "B")))))
验证效果
  1. 一致性检查:
identical(c, d)
# [1] TRUE
  1. 跑model.matrix:
model.matrix(c[[2]], model.frame(c[[2]], data, na.action = 'na.pass'))
# 正常出结果,不会再报错
额外说明

用formula()代替as.formula()也能达到一样的效果,都是触发R对表达式的解析,生成formula类和对应的terms属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:12:47