2011-03-25 91 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