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

使用data.table函数的by参数传入多列时出现错误

解决data.table函数中传入多列分组的错误问题

错误原因

你遇到的错误是因为在by参数中使用list(bycol1, bycol2)时,传入的字符串列名被当成了长度为1的常量值,而非引用DT中对应的列,导致分组元素长度与DT行数不匹配。

修正方案

直接将字符向量传入by参数即可,data.table支持直接用字符向量指定分组列。同时可以简化j表达式里的计算逻辑(无需lapply,因为只针对ret列计算):

vw_testfunction <- function(bycol1, bycol2){
  vwret_df <- DT[, .(vw_ret = sum(ret * mcap / sum(mcap, na.rm = TRUE), na.rm = TRUE)),
                 by = c(bycol1, bycol2),
                 .SDcols = "ret"]
  return(vwret_df)
}

test <- vw_testfunction("state", "datadate")

补充说明

  • by = c(bycol1, bycol2):data.table会自动识别字符向量中的元素为DT的列名,正确按列进行分组。
  • 简化计算逻辑:由于.SDcols仅指定了ret,无需用lapply遍历.SD,直接在j表达式中使用ret和mcap列计算即可(mcap是DT的列,可直接调用)。
  • 备选方案(不推荐,仅作参考):若坚持用list形式,可通过get()函数引用列:
by = list(get(bycol1), get(bycol2))

但这种写法不如直接传字符向量简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:05:19