2012-12-10 4 views
4

나는 데이터 테이블 my.data.table과 문자 벡터 i (길이가 1)을 가지고 my.data.table의 열 이름에 해당합니다. i을 사용하여 data.table 또는 data.frame이 아닌 벡터로 my.data.table의 해당 열을 추출하고 싶습니다.= TRUE를 사용하여 벡터를 반환하는 경우

어떻게하면됩니까?

> my.data.table <- data.table(a=1:2,b=2:3) 
> i <- "a" 
> class(my.data.table[,i,with=FALSE]) 
[1] "data.table" "data.frame" 
> as.vector(my.data.table[,i,with=FALSE]) ##does not work 
    a 
1: 1 
2: 2 
> is.vector(as.vector(my.data.table[,i,with=FALSE])) ##strange behavior 
[1] FALSE 
> 

나는 with=FALSEj에서 eval(i, <env>)를 사용하여이 작업을 수행 할 수있는 방법이 생각하지만 난 그것을 알아낼 수 없습니다.

+2

'my.data.table [[i]]'? – Marius

+0

@ 마리우스는 단일 열에 적합합니다. 'is.vector'는 x가 이름 이외의 다른 속성을 가지지 않는 지정된 모드의 벡터 인 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE를 리턴합니다. data.tables 및 data.frames는 모두 목록이므로 많은 특성을 갖는 벡터 – mnel

+0

[여기] (http://stackoverflow.com/questions/1169456/in-r-what-is-the-difference-between-the 참조) -와 -에 대한 설명 -에 대한 설명 - 일단 당신이 '['와'[[''이 문제는 훨씬 쉽게 다루기 쉬워진다. – Marius

답변

6

두 가지 중 하나가 예제에서 작동하지만 둘 중 두 번째가 더 일반적으로 유용합니다.

my.data.table[[i]] 
# [1] 1 2 
my.data.table[,i,with=FALSE][[1]] 
# [1] 1 2 
+0

두 번째 명령문에 대해 좋은 점은 행이 부분 집합이어야하는 경우에도 작동한다는 것입니다. 'my.data.table [2, i, with = FALSE] [[1]]'. 나는 여전히'drop = TRUE'가 구현되기를 기다리고있다. –

관련 문제