R中自定义函数修改data.table后聚合提示对象找不到如何解决
报错根因
- 你调用函数时传入的第一个参数
df_flights_red[[tailnum]]里的df_flights_red是函数内部定义的局部变量,仅在函数运行时的内部环境存在,全局环境中没有这个对象,所以直接调用就会提示找不到。 - 额外补充:你要把列作为参数传入data.table的by分组逻辑,也不能直接用原函数的写法,需要处理动态列名的识别问题。
正确修改&调用方法
如果你的需求是传入要额外分组的列、支持按指定tailnum筛选,调整后的函数和调用写法如下:
aggregate_flights <- function(group_col, test = FALSE) { # 筛选子集 if (test == TRUE) { df_flights_red <- df.flights[tailnum %in% c("N9EAMQ", "N950UW", "N460WN")] } else { df_flights_red <- df.flights } # 处理动态分组列,把字符串列名转成data.table可识别的列对象 y <- df_flights_red[, .( air_time = sum(air_time, na.rm = TRUE), distance = sum(distance, na.rm = TRUE) ), by = .(month, eval(as.symbol(group_col)))] return(y) } # 正确调用:直接传入要分组的列名字符串即可 agg <- aggregate_flights(group_col = "tailnum", test = TRUE)
可选优化点
- 原代码里多个
==判断可以替换成%in%运算符,写法更简洁也不容易出错。 - 如果你习惯用非标准计算传裸列名,可以引入rlang包处理,上面的字符串传参写法是无额外依赖、最容易理解的方案。
内容的提问来源于stack exchange,提问作者an_ja
相关产品推荐
相关产品推荐

