[datatable-help] extracting columns dynamically
Ben Tupper
btupper at bigelow.org
Thu Feb 19 15:49:04 CET 2015
Hi,
On Feb 18, 2015, at 12:11 PM, Arunkumar Srinivasan <aragorn168b at gmail.com> wrote:
> Please go through the FAQ. This is outlined in the data.table FAQ 2.17 - smaller syntax differences between data.frame and data.table.
>
> DT[, col] returns a vector because there’s no other way to return a vector and users wanted a way to return a vector.
> DT[, “col”, with=FALSE] returns a data.table because data.table doesn’t use the ‘drop’ argument. Plus you can always do DT[[“col”]] to subset a column from data.frame/data.tables.
> ‘drop’ has no other purpose, and it’s default value IMHO is a mistake. I’m not sure about plans to implement it in data.table (I’m not for it). Even if it were, you’d have to do: DT[, “col”, with=FALSE, drop=FALSE] which seems quite bad in comparison to DT[[“col”]].
Thanks for this; the DT[['col']] suites my needs perfectly. I can see in the examples (for ?data.table) and in the FAQ the examples that show the column selection behavior using 'with'. This discussion makes me wonder if the documentation for 'with' might benefit from a small embellishment. Perhaps like this?
with:
By default with=TRUE and j is evaluated within the frame of x; column names can be used as variables. When with=FALSE j is a character vector of column names or a numeric vector of column positions to select, and the value returned is always a data.table. with=FALSE is often useful in data.table to select columns dynamically.
I think the above faithfully describes the behavior I see, but I defer to you to know what is best.
Thanks again,
Ben
> --
> Arun
>
> On 12 Feb 2015 at 22:28:08, Ben Tupper (btupper at bigelow.org) wrote:
>
>> Hello,
>>
>> I would like to extract a column of a data.table, but I get unexpected (to me) results when I specify a column dynamically.
>>
>> DT <- data.table(ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c = 13:18)
>> thisone = "a"
>>
>> str(DT[,a])
>> # int [1:6] 1 2 3 4 5 6
>>
>> str(DT[,"a", with = FALSE])
>> # Classes ‘data.table’ and 'data.frame': 6 obs. of 1 variable:
>> # $ a: int 1 2 3 4 5 6
>> # - attr(*, ".internal.selfref")=<externalptr>
>>
>> str(DT[, thisone, with = FALSE])
>> # Classes ‘data.table’ and 'data.frame': 6 obs. of 1 variable:
>> # $ a: int 1 2 3 4 5 6
>> # - attr(*, ".internal.selfref")=<externalptr>
>>
>> I can't noodle out from the help why the latter two don't produce a vector as the first one does. I'm looking at this online resource http://www.rdocumentation.org/packages/data.table/functions/data.table and it doesn't seem like the description of with points to having two different results.
>>
>> "with By default with=TRUE and j is evaluated within the frame of x; column names can be used as variables. When with=FALSE, j is a vector of names or positions to select, similar to a data.frame. with=FALSE is often useful in data.table to select columns dynamically."
>>
>> How should I extract a single column dynamically to retrieve a vector?
>>
>> Cheers and thanks,
>> Ben
>>
>> > sessionInfo()
>> R version 3.1.0 (2014-04-10)
>> Platform: x86_64-apple-darwin13.1.0 (64-bit)
>>
>> locale:
>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> other attached packages:
>> [1] data.table_1.9.5 devtools_1.6.1
>>
>> loaded via a namespace (and not attached):
>> [1] chron_2.3-45 evaluate_0.5.5 formatR_1.0 httr_0.5 knitr_1.7 RCurl_1.95-4.1 stringr_0.6.2
>> [8] tools_3.1.0
>>
>> Ben Tupper
>> Bigelow Laboratory for Ocean Sciences
>> 60 Bigelow Drive, P.O. Box 380
>> East Boothbay, Maine 04544
>> http://www.bigelow.org
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20150219/e191fb2f/attachment.html>
More information about the datatable-help
mailing list