How do I update multiple columns in a data.table
with values from a matrix. Here is an MWE illustrating the issue I am facing:
library(data.table)
DT = data.table(expand.grid(1:3,1:3,1:3))
DF = expand.grid(1:3,1:3,1:3)
mat = matrix(seq(0, 80), 27, 3)
In a data.frame
world I would go with this syntax:
DF[,2:ncol(DF)] = mat[,2:ncol(DF)] #Data frame approach
A similar take on data.table
syntax yields multiple warnings with a very weird output.
DT[,2:ncol(DF) := mat[,2:ncol(DF)], with=FALSE] #Data table approach
This is obviously faulty - as the warnings indicates that the matrix was actually flattened. Warning messages:
1: In `[.data.table`(DT, , `:=`(2:ncol(DF), mat[, 2:ncol(DF)]), with = FALSE) :
2 column matrix RHS of := will be treated as one vector
You need to convert the RHS to a list
, and an easy way to do that is to use as.data.table
:
DT[, 2:ncol(DT) := as.data.table(mat[,2:ncol(DT)])]
with
is not necessary here, as LHS is deduced to mean column numbers automatically.
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