将变量列表转换为data.table对象

Mik*_*han 3 r data.table

是否有更优雅的方法将变量列表转换为data.table对象?

这不会产生预期的结果.

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)
Run Code Online (Sandbox Code Playgroud)

以下确实给出了期望的结果,但是对于大列表/表格来说速度很慢.有没有更好的办法?在汇总来自foreach包的结果时,我经常遇到这个问题.

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
Run Code Online (Sandbox Code Playgroud)

Jos*_*ien 5

编辑:最好的解决方案(ht Arun)就是这样做as.data.table(Var.List),调用as.data.table()现成的"list"方法.


就像data.frame(),data.table()将接受data.frame,矩阵任意数量的向量作为输入,通过其...参数处理它们.

利用后一个选项,您可以使用从这样的向量列表do.call()构造一个:data.table

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
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,您也可以使用`setDT(Var.List)`进行就地修改.或者使用`as.data.table(.)`,它有一个`list`方法. (3认同)