2011-03-25 47 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有帮助吗?此外,datatable上有几个线程有关在data.table中使用quote()表达式的帮助。

+1

嗨 - 感谢您的回复,并对此评论中的延迟感到抱歉!是的,quote() - 表达式有可能提供帮助;但是我无法在字符向量和data.table中使用的quote()ed表达式之间建立一座桥梁。我猜这是可行的。如果是这样,它的确会解决我的问题! – crayola 2011-04-02 08:33:44

+1

也许?解析(文本= ...)。 – 2011-04-04 17:24:42

+0

与@crayola具有完全相同的问题。不幸的是,我无法看到特征向量和引用之间的brigde。解析(text =)不会帮助我。任何人都可以帮助一个最小的例子? – 2015-04-24 14:47:21

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 2011-03-26 00:00:46