函数max()
在类型有序因子列上正确运行。但是,当列与by=
组合时,相同的操作将失败。
假设我有一个data.table:
DT <- data.table(ID=rep(1:3, 3), State=sample(LETTERS[1:3], 9, replace=TRUE))
将列State
转换为有序因子:
DT[, State := factor(State, levels=LETTERS[1:3], ordered = TRUE)]
这有效:
DT[, max(State)]
此操作失败并显示错误:
DT[, max(State), by="ID"]
错误是:gmax(状态)出错:max对因子没有意义。
怎么回事?
答案 0 :(得分:3)
这是一个错误,已在data.table
的当前开发版本中修复。
您可以通过以下方式安装开发版本:
install.packages('data.table', type = 'source',
repos = 'http://Rdatatable.github.io/data.table')
如果失败,请检查Installation wiki上的详细信息。
library(data.table)
# data.table 1.11.5 IN DEVELOPMENT built 2018-08-13 20:20:11 UTC; travis Latest news: r-datatable.com
DT[ , max(State), by="ID"]
# ID V1
# 1: 1 C
# 2: 2 C
# 3: 3 B
对于那些在受控/生产环境中无法更新的用户,您仍然可以通过运行以下命令来解决该问题:
dt_optim = options(datatable.optimize = 0)
DT[ , max(State), by="ID"]
# resetting afterwards to keep your code running as fast as possible
options(datatable.optimize = dt_optim)
该错误来自data.table
内部优化的分组框架GForce
;上述解决方法会使该代码停止执行,并且默认为base::max
。