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

如何在data.table的j表达式中无需指定.envir即可使用glue()

在data.table的j表达式中简化glue()的使用方法

直接在data.table的j表达式里调用glue()会报错找不到列名,这是因为glue()默认使用的环境不是data.table当前的行/分组环境。指定.envir = .SD可以解决问题,但每次都加这个参数太麻烦。

你可以封装一个自定义函数,自动指定正确的环境,不用手动传参:

glue1 <- function(...) {
  glue(..., .envir = parent.frame())
}

测试示例

library(data.table)
library(glue)
data(iris)
dt.iris <- data.table(iris)

# 直接使用封装后的glue1,无需额外指定.envir
dt.iris[, myText := glue1('The species is {Species} with sepal length of {Sepal.Length}')]

# 查看生成的结果
head(dt.iris$myText)

原理说明

在data.table的j表达式执行时,parent.frame()会指向当前的行/分组执行环境,这个环境里可以直接访问到所有列变量,效果和指定.envir = .SD完全一致,却省去了每次手动传参的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:45:55