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

如何不用for循环实现R data.table将向量元素逐个作为新列添加

实现方案

直接利用data.table := 运算符的多列批量赋值能力即可实现你要的效果,不需要for循环、也不会用到lapply或.SD:

foo <- data.table(col1 = 1:10, col2 = sample(letters[1:5], replace = TRUE))

fun.add <- function(DT) {
  v1 <- c(3, 5.5, 9)
  v2 <- c("x", "y", "z")
  
  # 完全符合你注释中提到的写法格式
  DT[, paste0("aaa", 1:3) := as.list(v1)]
  DT[, paste0("bbb", 1:3) := as.list(v2)]
}

fun.add(foo)

原理说明

  • := 左侧传入长度为n的列名字符向量时,右侧只需要传入等长的列表,列表的每个元素就会作为对应列的常量值填充到整列,完全匹配「第j个新增列值为向量第j个元素」的需求。
  • 如果需要适配不定长的向量(比如向量长度为5时自动新增5列),可以把上面的1:3替换为seq_along(v1)、seq_along(v2)即可,通用写法如下:
fun.add.general <- function(DT) {
  v1 <- c(3, 5.5, 9, 10, 12) # 长度为5的向量示例
  v2 <- c("x", "y", "z", "m", "n")
  DT[, paste0("aaa", seq_along(v1)) := as.list(v1)]
  DT[, paste0("bbb", seq_along(v2)) := as.list(v2)]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:03