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

R语言修复按ID生成矩阵维度不匹配问题

问题根源

你生成的矩阵维度与预期相反,核心问题出在g1的分组逻辑:
你用as.integer(gl(length(int1), 3, length(int1)))生成的分组会把int1前3个元素归为第1组、剩余2个归为第2组,刚好把ID B的3个元素分到第一组、ID A的2个元素分到第二组,和你l1列表(A的2×2矩阵在前、B的3×3矩阵在后)的顺序完全颠倒。

调整方案

不需要修改原有的f2函数,仅替换错误的g1分组逻辑即可:

  1. 直接用你已经设置好的列表名称(ID值)作为分组依据,避免硬编码长度的错误
  2. 显式指定分组排序为A在前、B在后,和l1的顺序匹配

修改后完整可运行代码

# 替换原g1定义的部分,其余逻辑不变
g1 <- names(int1)
split_int1 <- split(int1, g1)[c("A", "B")]
split_int2 <- split(int2, g1)[c("A", "B")]

f2 <- function(.int1, .int2) {
  t(outer(seq_along(.int1), seq_along(.int2), 
          FUN = Vectorize(function(i, j)  min(.int1[[i]]$jDate) - 
                            min(.int2[[j]]$jDate))))
}

lstMat <- map2(split_int1, split_int2, f2)
# 执行逐元素除法,维度完全匹配
map2(l1, lstMat, `/`)

说明

  • 按ID分组的逻辑更通用,不会因为后续数据集行数变化、分组数量变化出现硬编码错误
  • 原f2函数逻辑正确,会自动根据输入的分组元素数量生成对应维度的矩阵:ID A输入2个元素生成2×2矩阵,ID B输入3个元素生成3×3矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:06