2014-04-28 2 views
3

변수 목록을 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) 

다음은 원하는 결과를 제공하지만 큰 목록/테이블에서는 느립니다. 더 좋은 방법이 있습니까? 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 

답변

5

편집 : 가장 좋은 해결책 (H.T. 아룬)는 as.data.table()의 기성품 "list" 메소드를 호출, as.data.table(Var.List) 그냥 할 것입니다.


다만 data.frame() 같은 data.table()... 인수를 통해이를 처리하는 data.frame 매트릭스, 입력으로서 벡터 또는 임의의 수를 받아 들일 것이다.

후자의 옵션을 활용, 당신은 벡터의 목록에서 data.table를 구성 do.call()를 사용할 수 있습니다

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 
+0

하는 것은 쉬웠다 그! 정말 고마워! –

+3

이 경우 또한'setDT (Var.List)'로 내부 수정을 할 수 있습니다. 또는'list.dat' 메서드가있는'as.data.table (.)'을 사용하십시오. – Arun

+1

@Arun - 감사합니다. 그것들은 훨씬 좋네요. –