2011-03-25 28 views
10

En mi trabajo, a menudo me refiero a listas de variables como un solo vector de caracteres.data.table y vectores de caracteres

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

Siempre que sea posible, Quiero usar vecvar en lugar de enumerar las variables, ya que esto hace que el código más robusto para aplicaciones futuras a ligeramente diferentes listas de variables.

Recientemente descubrí data.table, y por mucho que me guste la elegancia general de la sintaxis y las ganancias de eficiencia, encuentro que choca un poco con mi inclinación descrita anteriormente. De hecho, A[, vecvar] no funcionará.

No estoy seguro de la mejor manera de evitar esto.

A[, vecvar, with=F] funcionará, pero no siempre es conveniente (por ejemplo, A[, list(vecvar, var1+var2), with=F] no funcionará).

A[, sapply(vecvar, get)] no funcionará, aunque A[, sapply(vecvar, function(x) get(x))] lo hará.

No estoy atascado, ya que tengo maneras de manejarlo, solo quiero saber cuál es la mejor manera de trabajar con esto, ¡antes de adquirir malos hábitos!

Respuesta

2

I tipo de ver lo que quieres decir. ¿Ayuda FAQ 1.6? Además, hubo algunos subprocesos en la tabla de datos: ayuda sobre el uso de las expresiones de quote() ed en data.table.

+1

Hola, gracias por la respuesta, y disculpas por la demora en este comentario. Sí, quote() - las expresiones ed tienen el potencial de ayudar; pero falta un puente que no pude construir entre un vector de caracteres, y una expresión editada (citable) utilizable en data.table. Supongo que esto es factible; si es así, de hecho resolvería mis problemas! – crayola

+1

Quizás? Parse (text = ...). –

+0

Tiene exactamente el mismo problema que @crayola. Desafortunadamente no puedo ver el puente entre un vector de charater y una cita. El análisis (texto =) no me ayudó. ¿Alguien podría ayudar con un ejemplo mínimo? –

1

¿esto es lo que quieres hacer?

> 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

Hola, realmente no, ya que utiliza la estructura de data.frame pero no se puede combinar sin problemas con las capacidades de data.table. Por ejemplo, me gustaría una declaración muy breve que regrese dentro de un data.table: vecvar, var1 + var2 (mencionando explícitamente var1 y var2 en vecvar) Todas las formas en que he pensado hasta ahora hacen que esto sea un poco más complejo que debería ser necesario. – crayola