3

Is there a more elegant way of converting a list of variables into a data.table object?

This does not give the desired result.

require(data.table)
set.seed(1)
Var.List <- list(a=sample(letters, 10, rep=T),b=rnorm(10), c=rnorm(10))
data.table(Var.List)

The following does give the desired result, but is slow with big lists/tables. Is there a better way? I run into this problem quite often when aggregating results from the foreach package.

data.table(as.data.frame(Var.List))

    a          b           c
 1: g -0.8204684 -0.04493361
 2: j  0.4874291 -0.01619026
 3: o  0.7383247  0.94383621
 4: x  0.5757814  0.82122120
 5: f -0.3053884  0.59390132
 6: x  1.5117812  0.91897737
 7: y  0.3898432  0.78213630
 8: r -0.6212406  0.07456498
 9: q -2.2146999 -1.98935170
10: b  1.1249309  0.61982575

1 Answer 1

5

Edit: The best solution (h.t. Arun) is to just do as.data.table(Var.List), invoking as.data.table()'s ready-made "list" method.


Just like data.frame(), data.table() will accept a data.frame, a matrix, or an arbitrary number of vectors as inputs, processing them via its ... argument.

Taking advantage of the latter option, you can use do.call() to construct a data.table from a list of such vectors:

do.call(data.table, Var.List)
    a          b           c
 1: g -0.8204684 -0.04493361
 2: j  0.4874291 -0.01619026
 3: o  0.7383247  0.94383621
 4: x  0.5757814  0.82122120
 5: f -0.3053884  0.59390132
 6: x  1.5117812  0.91897737
 7: y  0.3898432  0.78213630
 8: r -0.6212406  0.07456498
 9: q -2.2146999 -1.98935170
10: b  1.1249309  0.61982575
Sign up to request clarification or add additional context in comments.

3 Comments

That was easy! Thanks so much!
In this case, also, you can modify in-place with setDT(Var.List). Or using as.data.table(.) which has a list method.
@Arun -- Thanks. Those are much nicer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.