该功能max()
在类型有序因子列上正确运行.但是,在对列进行分组时,相同的操作将失败by=
.
假设我有一个data.table:
DT <- data.table(ID=rep(1:3, 3), State=sample(LETTERS[1:3], 9, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
将列转换State
为有序因子:
DT[, State := factor(State, levels=LETTERS[1:3], ordered = TRUE)]
Run Code Online (Sandbox Code Playgroud)
这有效:
DT[, max(State)]
Run Code Online (Sandbox Code Playgroud)
这失败了,错误:
DT[, max(State), by="ID"]
Run Code Online (Sandbox Code Playgroud)
错误是:gmax(状态)出错:max对因子没有意义.
怎么会?
这是一个错误,已在当前开发版本中修复data.table
。
您可以通过以下方式安装开发版本:
install.packages('data.table', type = 'source',
repos = 'http://Rdatatable.github.io/data.table')
Run Code Online (Sandbox Code Playgroud)
如果失败,请检查安装 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
Run Code Online (Sandbox Code Playgroud)
对于那些在受控/生产环境中无法更新的人,您仍然可以通过运行来回避问题:
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)
Run Code Online (Sandbox Code Playgroud)
该错误来自data.table
内部优化的分组框架GForce
;上述解决方法会阻止此代码执行并默认为base::max
.