2012-12-10 40 views
4

我有一个data.table my.data.table和一个字符向量i(长度为1),对应于my.data.table的一个colname。使用i,我想提取my.data.table的相应列作为不是类data.tabledata.frame的向量。使用with = 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=FALSEjeval(i, <env>)但我无法弄清楚。

+2

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

+0

@Marius对于单个列是正确的。如果x是指定模式的矢量,且名称不具有其他属性,则is.vector将返回TRUE。否则返回FALSE。 data.tables和data.frames都是列表,因此具有很多属性的矢量 – mnel

+0

请参见[here](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'的实施。 –

相关问题