2011-03-25 5 views
10

제 작품에서는 종종 변수 목록을 단 하나의 문자 벡터로 참조합니다. 이 미래의 응용 프로그램에 대한 변수의 약간 다른 목록에 내 코드를보다 강력하게로data.table 및 문자 벡터

A <- data.table(var1 = 1:10, var2 = 11:20, var3 = 21:30) 
vecvar <- c("var1", "var2", "var3") 

이 가능하다면, 나는 vecvar를 사용하는 대신 변수를 열거합니다.

나는 최근에 data.table을 발견했으며, 구문과 효율성 향상의 일반적인 우아함만큼이나 위에 열거 된 내 성향과 약간 충돌합니다. 사실 A[, vecvar]은 작동하지 않습니다.

이 문제를 해결하는 가장 좋은 방법은 아직 결정되지 않았습니다.

A[, vecvar, with=F]이 작동하지만 항상 편리하지는 않습니다 (예 : A[, list(vecvar, var1+var2), with=F]).

A[, sapply(vecvar, get)]은 작동하지 않지만, A[, sapply(vecvar, function(x) get(x))]이됩니다.

나는 그것을 처리 할 방법이 있기 때문에 붙어 있지 않습니다. 단지 나쁜 습관을 픽업하기 전에 이것이 가장 좋은 방법이 무엇인지 알고 싶습니다.

답변

2

나는 당신이 의미하는 것을 보았습니다. FAQ 1.6 도움이 되셨습니까? 또한 data.table에서 quote() 식을 사용하는 데 대한 datatable-help에 몇 가지 스레드가있었습니다.

+1

안녕하세요 - 답장을 보내 주셔서 감사합니다.이 의견에 늦어서 죄송합니다. 예, quote() - ed 표현식이 도움이 될 수 있습니다. 그러나 문자 벡터와 data.table에서 사용할 수있는 quote() 표현식 사이에 만들 수 없었던 다리가 없습니다. 나는 이것이 가능하다고 생각하고있다. 그렇다면 실제로 내 문제를 해결할 것입니다! – crayola

+1

아마도 ... 구문 분석 (텍스트 = ...). –

+0

@crayola와 똑같은 문제가 있습니다. 불행히도 나는 charater 벡터와 따옴표 사이의 부류를 볼 수 없습니다. 파싱 ​​(텍스트 =) 나를 도와주지 않아. 누구든지 최소한의 예를 도울 수 있습니까? –

1

이게 당신이 원하는 것입니까?

> subset(A, select=vecvar[1:2]) 
     var1 var2 
[1,] 1 11 
[2,] 2 12 
[3,] 3 13 
[4,] 4 14 
[5,] 5 15 
[6,] 6 16 
[7,] 7 17 
[8,] 8 18 
[9,] 9 19 
[10,] 10 20 
+0

안녕하세요. 실제로는 data.frame 구조를 사용하지만 data.table 기능과 완벽하게 결합 될 수는 없습니다. 예를 들어, data.table : vecvar, var1 + var2 (명시 적으로 vecvar에서 var1 및 var2를 언급하는 범위 내)에서 반환하는 매우 간단한 문장을 원합니다. 지금까지 생각한 모든 방식을이 방식보다 조금 복잡하게 만듭니다. 해야합니다. – crayola