运行data.table代码报function '.' not found问题咨询
错误原因分析
- 核心触发报错的原因是data.table语法使用错误:
data.table是用于创建数据表的构造函数,不能直接放在[i, j, by]语法的开头作为操作对象。.[()是data.table专为DT[i, j, by]结构中j位置设计的特殊语法糖,离开这个上下文环境R会将.识别为普通函数,自然会报"function '.' not found"的错误。 - 其余隐含语法问题:
- 你要操作的数据集是传入的
grads对象,聚合时应该以grads[, .(...), by = Major_category]的结构编写,不需要在列名前加grads$前缀,data.table的执行环境会自动识别当前数据集的列。 - 链式调用
order排序时,排序的是前面聚合生成的新表的avgRank列,不要加grads$,原grads表中不存在avgRank列,加前缀会触发新的报错。
- 你要操作的数据集是传入的
修正后的代码
gradSummary <- function(grads) { grads$Total[is.na(grads$Total)] <- 0 total.grads <- sum(grads$Total) grads[, .( SchoolPerc = round(100*sum(Total)/total.grads, 2), avgRank = round(mean(Rank), 0), avgSalary = round(mean(Median), 2) ), by = Major_category][order(avgRank)] } gradSummary(grads)
内容的提问来源于stack exchange,提问作者Gabriela Serna
相关产品推荐
相关产品推荐

