抵抗子集化的magic data.table

时间:2015-05-27 19:31:16

标签: r data.table

我的一位同事发送了以下data.table(CRAN版本1.9.4):

w <- structure(
  list(
    type = c("current", "prior"),
    value = c(10, 20)
    ), 
  class = c("data.table", "data.frame"), 
  index = structure(integer(0), type = c(2L, 1L))
  )

第一次刷时,w似乎是正常的data.table

> w
      type value
1: current    10
2:   prior    20
> w[type=='prior',]
    type value
1: prior    20

但出于某种原因,它不能是type == 'current'的子集:

> w[type=='current',]
Empty data.table (0 rows) of 2 cols: type,value

使用get函数解决了这个问题:

> w[get('type')=='current',]
      type value
1: current    10

从data.table中删除索引:

x <- structure(
  list(
    type = c("current", "prior"),
    value = c(10, 20)
  ), 
  class = c("data.table", "data.frame")
)
> x
      type value
1: current    10
2:   prior    20

data.table上的这个“index”属性是什么,以及如何防止它在将来创建?我知道我的同事没有故意创建这个索引,但不知何故,在连接或子集操作期间,这个data.table获得了这个神奇的属性。

0 个答案:

没有答案