Hey Frank, Thanks for pointing out that SO link, I had missed it.
All, I'm curious as to which used cases this functionality would be used in (used for?) thanks, Rick On Wed, Aug 7, 2013 at 8:14 PM, Frank Erickson <[email protected]> wrote: > Hi Rick, > > I guess it's intentional: Matthew saw this SO question (since he edited > one of the answers): > http://stackoverflow.com/questions/9547518/creating-a-data-frame-where-a-column-is-a-list > > Some musings: Of course, to reproduce as.data.frame-like behavior, you can > un-nest the list, so both functions treat it the same way. > > Z <- unlist(Y,recursive=FALSE) > > identical(as.data.table(Z),as.data.table(as.data.frame(Z))) # TRUE > # or, equivalently (?) > identical(do.call(data.table,Z),data.table(do.call(data.frame,Z))) # TRUE > > > On the other hand, going back the other direction (getting data.table-like > behavior when data.frame's is the default) is more awkward, as seen in that > SO question (where they mention protecting each sublist with the I() > function). Besides, I'm with @flodel, who asked the SO question, in > expecting data.table's behavior: one top-level item in the list mapping to > one column in the result... > > --Frank > > On Wed, Aug 7, 2013 at 4:56 PM, Ricardo Saporta < > [email protected]> wrote: > >> Hi all, >> >> Note the following discrepancy in structure between as.data.frame & >> as.data.table when called on a nested list. >> as.data.frame converts the sublist into individual columns whereas >> as.data.table stacks them into a single column and creates additional rows. >> >> Is this intentional? >> -Rick >> >> >> as.data.frame(X) >> # start type end data.editDist data.second >> # 1 start_node is_similar end_node 1 HelloWorld >> >> as.data.table(X) >> # start type end data >> # 1: start_node is_similar end_node 1 >> # 2: start_node is_similar end_node HelloWorld >> >> >> >> >> ### Copy+Paste'able Below ### >> >> # Example 1: >> X <- structure(list(start = "start_node", type = "is_similar", end = >> "end_node", >> data = structure(list(editDist = 1, second = "HelloWorld"), .Names = >> c("editDist", >> "second"))), .Names = c("start", "type", "end", "data")) >> >> as.data.frame(X) >> as.data.table(X) >> >> as.data.table(as.data.frame(X)) >> >> >> # Example 2, with more elements: >> Y <- structure(list(start = c("start_node", "start_node"), type = >> c("is_similar", "is_similar"), end = c("end_node", "end_node"), data = >> structure(list(editDist = c(1, 1), second = c("HelloWorld", "HelloWorld")), >> .Names = c("editDist", "second"))), .Names = c("start", "type", "end", >> "data")) >> >> as.data.frame(Y) >> as.data.table(Y) >> >> >> _______________________________________________ >> 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
