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

R Data.table创建新列时报错,寻求解决方法

问题描述

作为R语言初学者,运行以下代码时,data.table在创建新列环节抛出错误,推测是语法问题,查阅资料得知添加by参数可能解决,但不知如何添加。

运行代码

NF = MFDETAILED[,c(1,2)]
feature_names = colnames(compare)
NF = cbind(NF, data.table( 
  NF = apply(compare,1,function(x) {paste0(feature_names[(which(x[]==1))],collapse = ", ")}), 
  NMF = apply(compare,1,function(x) {paste0(feature_names[(which(x[]==0))],collapse = ", ")})
))
# 报错行
**NF[, c("LOOKUP", "MAT") := tstrsplit(COMBINATION, "-", fixed=TRUE)]**
NF[, ("COMBINATION"):=NULL]
setcolorder(NF, c( "LOOKUP","MAT","MS", "NF","NMF"))
setnames(NF,c("LOOKUP MATERIAL", "MATERIAL", "MATCH SCORE","MATCH FEATURES","NON MATCH FEATURES"))

错误信息

Error in [.data.table(NF, , :=(c("LOOKUP", "MAT"), tstrsplit(COMBINATION, : Supplied 2 columns to be assigned 4 items. Please see NEWS for v1.12.2.
中文翻译:在[.data.table操作中,提供了2列,但需要分配4个条目。请查看v1.12.2版本的NEWS文档。

问题分析

这个错误的核心原因是:tstrsplit返回的结果总长度和data.table的行数不匹配,导致无法将分割结果正确映射到要创建的2个新列。当部分COMBINATION字段分割后得到的元素数量不一致时,批量处理模式下就会出现条目数不匹配的情况。

解决方法

给data.table的操作添加by = .I参数,强制按行索引逐行处理分割逻辑,确保每行的分割结果都能正确对应到该行的LOOKUP和MAT列。修改后的报错行代码如下:

NF[, c("LOOKUP", "MAT") := tstrsplit(COMBINATION, "-", fixed=TRUE), by = .I]

完整修改后代码

NF = MFDETAILED[,c(1,2)]
feature_names = colnames(compare)
NF = cbind(NF, data.table( 
  NF = apply(compare,1,function(x) {paste0(feature_names[(which(x[]==1))],collapse = ", ")}), 
  NMF = apply(compare,1,function(x) {paste0(feature_names[(which(x[]==0))],collapse = ", ")})
))
# 修改后的行
NF[, c("LOOKUP", "MAT") := tstrsplit(COMBINATION, "-", fixed=TRUE), by = .I]
NF[, ("COMBINATION"):=NULL]
setcolorder(NF, c( "LOOKUP","MAT","MS", "NF","NMF"))
setnames(NF,c("LOOKUP MATERIAL", "MATERIAL", "MATCH SCORE","MATCH FEATURES","NON MATCH FEATURES"))

原理说明

by = .I会让data.table以每行作为一个分组来执行操作,tstrsplit会单独处理每行的COMBINATION值,分割后的结果直接分配到当前行的两个新列中,避免了批量处理时因条目数不匹配导致的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:25:09