You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
library(data.table)
data.table(character(0), NULL)
# Error in data.table(character(0), NULL) : column or argument 2 is NULL
It would arguably be nice for data.table() to allow the construction of a table like this.
as.data.table.list allows it with no error:
DT = as.data.table(list(y = character(0), x = NULL))
NULL is idiomatic as a column value for grouped operations and (mostly) rbindlist:
data.table(g = 1:2)[, if (.GRP == 1L) Sys.Date(), by=g]
rbind(DT, list(y = "a", x = 12))
# also works, albeit with a warning
data.table(g = 1:2)[, .(v = c("yo", "zo"), z = if (.GRP == 1L) Sys.Date()), by=g]
# fails, with an informative error message
rbind(DT, list(y = "a", x = Sys.Date()))
And finally, the "wildcard" behavior of NULL in grouped operations and rbindlist is built upon in packages like vetr (see the "alike" vignette):
library(vetr)
alike(DT, data.table(y = "a", x = "b")) # TRUE
alike(DT, data.table(y = "a", x = 12)) # TRUE
I may be overlooking some arguments against it. The main ones that come to mind are:
There is no way to add such a NULL column by reference.
Does this have any meaning or use for tables with rows?
There are bugs (like the one I linked at the top) that go away if NULL columns aren't a thing (?).
If it's decided that data.tables shouldn't have NULL columns (which would also be fine), then I guess as.data.table.list(x) may need to change to throw an error; or to drop the NULL elements of x even when max(lengths(x)) == 0.
The text was updated successfully, but these errors were encountered:
franknarf1
changed the title
[Request] Allow NULL data.table columns in data.table()
[Request] Allow NULL columns in data.table()
Aug 16, 2017
Yep: data.table's should not have NULL columns. Every column needs to have a type.
Have added some catches and tests. The things you mention should still work like the grouping example (I checked that's tested). If not, please raise a new issue.
This could be either a question or a request. The question would be: "Are NULL columns allowed in a data.table?" The request:
I was looking at #2303 and noticed this error:
It would arguably be nice for
data.table()
to allow the construction of a table like this.as.data.table.list
allows it with no error:NULL
is idiomatic as a column value for grouped operations and (mostly)rbindlist
:And finally, the "wildcard" behavior of
NULL
in grouped operations andrbindlist
is built upon in packages like vetr (see the "alike" vignette):I may be overlooking some arguments against it. The main ones that come to mind are:
NULL
column by reference.NULL
columns aren't a thing (?).If it's decided that data.tables shouldn't have
NULL
columns (which would also be fine), then I guessas.data.table.list(x)
may need to change to throw an error; or to drop theNULL
elements ofx
even whenmax(lengths(x)) == 0
.The text was updated successfully, but these errors were encountered: