@Arun and eddi: This question has come up before. http://r.789695.n4.nabble.com/Better-hacks-getting-a-vector-AND-using-with-inserting-chunks-of-rows-tt4666592.html (And I'm sure there are other times, too.) I can't say I've heard anyone arguing about it, though. :)
I guess it works that way because ...in dt[ ,a], j is an expression which evaluates to a vector ...in dt[,"a",with=FALSE] the option turns on the "you must want one or more columns" mode, translating j from "a" to list(a) It's unintuitive if you're expecting data frame behavior (you know, drop=TRUE, as Arun mentioned), but if you've already seen dt[,list(a)], it shouldn't be much of a surprise. Adding the drop option, and maybe defaulting it to TRUE when with=FALSE might satisfy eddi's concern...? On Fri, May 17, 2013 at 10:22 AM, Eduard Antonyan <[email protected] > wrote: > I don't remember discussing this issue...? What is the conceptual > difference between dt[, a] and dt[, "a", with = F] and what does 'drop' > have to do with this?? > > > On Fri, May 17, 2013 at 10:02 AM, Arunkumar Srinivasan < > [email protected]> wrote: > >> Eduard, are we discussing the same thing again :)? Wasn't this somehow >> your question as well.. the discrepancy between: >> >> dt[, a] and dt[, "a", with=FALSE]. >> >> There should be a drop=TRUE/FALSE option (as in the case of data.frame) >> that should be used when you use `with=FALSE`. Until then, the default >> option seems to be drop=FALSE, which results in a data.table. >> >> Alexandre, as of now, it could be done as Eduard points out. >> >> Arun >> >> On Friday, May 17, 2013 at 4:59 PM, Eduard Antonyan wrote: >> >> Use dt[[colname]], but this seems like a bug to me - I would've thought >> that dt[, a] and dt[, "a", with = F] should return the exact same thing. >> >> >> On Fri, May 17, 2013 at 9:42 AM, Alexandre Sieira < >> [email protected]> wrote: >> >> Sorry if this is a basic question. >> >> >> I'm using R 3.0.0 and data.table 1.8.8. The documentation for 'j' states >> that "A single column or single expression returns that type, usually a >> vector." >> >> >> I am able to obtain this behavior if I know the column name in advance: >> >> >> > dt = data.table(a=c(1, 2, 3), b=c(4, 5, 6)) >> >> > dt >> >> a b >> >> 1: 1 4 >> >> 2: 2 5 >> >> 3: 3 6 >> >> > str(dt[,a]) >> >> num [1:3] 1 2 3 >> >> >> However, if I don't, no such luck: >> >> > colname="a" >> > str(dt[,colname,with=F]) >> Classes ‘data.table’ and 'data.frame': 3 obs. of 1 variable: >> $ a: num 1 2 3 >> - attr(*, ".internal.selfref")=<externalptr> >> >> If there a way to extract an entire column as a vector if I have the >> column name as a character scalar? >> >> Thank you! >> >> -- >> Alexandre Sieira >> CISA, CISSP, ISO 27001 Lead Auditor >> >> "The truth is rarely pure and never simple." >> Oscar Wilde, The Importance of Being Earnest, 1895, Act I >> >> _______________________________________________ >> 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 >> >> >> > > _______________________________________________ > 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
