Hi,

Yes expected. From ?data.table:

"Advanced: When i is a single variable name, it is not considered an

expression of column names and is instead evaluated in calling scope."

Subsetting by a logical column is the only example I can think of where

this is confusing. But we make use of this feature quite a lot e.g.

TMP=list(...);DT[TMP]

safe in the knowledge that DT[TMP] won't start to fail if DT in future

has a column called TMP.

When I have a logical column boolCol I wrap with (): DT[(boolCol)].

This avoids the memory allocation and scan of ==TRUE, and avoids the

variable name repetition of DT[DT$boolCol]

Matthew

On 23.04.2013 19:46, G See wrote:

> Hi,

>

> Is the following expected behavior?

>

> DT = data.table(x=rep(c("a","b","c"),each=3), TF=c(TRUE,FALSE,TRUE))

>

> #All of these return what I expect:

>

> DT[c(TRUE, FALSE, TRUE)]

> DT[TF==TRUE]

> DT[DT$TF]

>

> #Why doesn't this?

> DT[TF]

> #Error in eval(expr, envir, enclos) : object 'TF' not found

>

> Thanks,

> Garrett

> _______________________________________________

> datatable-help mailing list

>

[hidden email]
>

>

https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help_______________________________________________

datatable-help mailing list

[hidden email]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help