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
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help