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

在循环中使用data.table的set函数为多数据表新增列遇报错

解决data.table循环中set函数新增列的报错问题

错误原因

你代码里的.$x无法生效,是因为set()函数的value参数是普通R表达式,这里的.没有被绑定到对应的data.table对象——.只有在data.table的方括号[]语法里才会指代当前数据表,在set()的参数里不适用。

两种可行解决方案

方案一:用临时变量存储数据表

先通过get(i)获取数据表并赋值给临时变量,再用临时变量调用列:

names_df <- c('df', 'df_1')
for(i in names_df)
{
  dt <- get(i)
  set(dt, j = 'y', value = toupper(dt$x))
}

方案二:用with()指定上下文

通过with()把获取到的数据表作为上下文,直接引用列名即可:

names_df <- c('df', 'df_1')
for(i in names_df)
{
  set(get(i), j = 'y', value = with(get(i), toupper(x)))
}

验证运行结果,两个数据表都会新增y列,值为x列的大写形式:

> df
   x y
1: a A
2: b B
> df_1
   x y
1: c C
2: d D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:47:04