data.table给出错误:“逻辑错误。我不是data.table,但提供'on'参数”

时间:2018-04-03 12:27:55

标签: r data.table

鉴于以下代码。

library(data.table)

dt <- data.table(V1=round(runif(9,100,999),2), V2=rep(1:3,3),
                 V3=round(runif(9,10,99),2), V4=rep(letters[1:3],3))
setindex(dt,V4)

F1 <- dt[V2==2 & V3>=3, max(V1)]            
F2 <- dt[V2==2 & V3>=3, max(V1), on = "V4"]      

我100%确定class(dt)是“data.table,data.frame” 它与F1运行良好,但出现了错误

  

逻辑错误。我不是data.table,但提供了'on'参数。

当F2?

为什么呢?怎么解决?

我要做的不是子集化(或分组),而是使用“on”命令提高计算效率,我被告知是二级索引的关键字。 非常感谢。

我知道我犯了什么错误。简单来说,我正在以错误的方式使用它。 当给出“on”命令时,我总是一个data.table。

我最初的目的是有效地搜索目标。

条件:V3&gt; = 3,V2 == 2 target:max(V1)

我不能通过我的条件,但我可以使我成为一个data.table如下。

F2 <- dt[V3>=3][V2==2,max(V1), on = "V4"]

它完美运行! 谢谢你们。

1 个答案:

答案 0 :(得分:1)

您没有使用正确的子集语法。您必须在名为V2V3的工作空间中包含一些对象。 data.table认为你正在合并他们。 i参数是[.data.table的第一个参数。将V2==2 & V3>=3替换为(V2==2 & V3>=3)以引用列变量。有关i=作为[.data.table中子集的范围界定的细微差别,请参阅here。最后一个on可能应该是by(尽管由于子集语法,您仍会遇到错误)。