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

purrr::map_dfr中调用data.table函数提示'.x'未找到错误如何解决

报错原因

问题出在函数内的substitute(group)逻辑:
单独调用ffreq('mpg')时,substitute会直接捕获你传入的字符串字面量'mpg',可正常被data.table解析为分组列。但放到map_dfr中调用时,purrr的迭代值是通过内部变量.x传递的,此时substitute(group)捕获到的是符号.x,data.table在评估分组参数的环境中找不到.x对象,就触发了报错。

可行解决方案

方案1:直接使用字符串传参(推荐)

data.table的by参数原生支持传入字符串形式的列名,不需要额外走substitute解析,修改函数即可:

ffreq = function(group, data = df){
  return(data[, .(N = .N), by = group])
}

# 此时map_dfr调用可正常运行
d_all = map_dfr(names(df), ffreq)

方案2:将捕获的表达式转为字符串

如果需要保留substitute的写法,可以在函数内把捕获的表达式转成字符串再传入分组参数:

ffreq = function(group, data = df){
  group = as.character(substitute(group))
  return(data[,.(N = .N), by = group])
}

d_all = map_dfr(names(df), ffreq)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:54:01