[datatable-help] Indexing by a logical column

Matthew Dowle mdowle at mdowle.plus.com
Tue Apr 23 21:12:23 CEST 2013


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
> datatable-help at lists.r-forge.r-project.org
> 
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help


More information about the datatable-help mailing list