I want to add a large number of columns to a data.table in R.
The column names are held in a vector a
. How to do it?
x <- data.table(a=1,b=1)
f <- function(x) {list(0)}
The following works:
x <- x[, c("col1","col2","col3") := f()]
but the following doesn't:
a <- c("col1","col2","col3")
x <- x[, a := f()]
How do I add the columns defined within a
?
In order to make that work, you have to wrap the a
in ()
like this:
x[, (a) := f()]
this results in the following datatable:
> x a b col1 col2 col3 1: 1 1 0 0 0
Explanation: when you use x[, a:=f()]
you assign the outcome of f()
to column a
(data.table
allows this for convenience). Thus a
is treated as a name in this occasion. When you use (a)
, a
is treated as an expression (in this case a vector of column names).
Furthermore: you don't need to assign this to x
again with x <-
as the datatable is updated by reference because the :=
operator is used.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With