R我的S4向量将无法在data.table中正确索引

时间:2018-04-23 21:16:18

标签: r vector indexing data.table s4

我正在尝试将自己的S4类视为data.table中的向量。一切顺利,除了当我在data.table中索引行时,我的索引方法不适用于向量。这与data.frame完美配合,但不适用于data.table。

这是我的班级:

setClass('myvector', contains = 'vector', slots = c(foo = 'logical')

它包含一个向量,并在一个槽中有一个并行逻辑向量'foo'。 我创建了一个[方法,以便将foo槽与包含的向量一起编入索引。

setMethod('[', 'myvector', 
          function(x, i) {
            new('myvector', x@.Data[i], foo = x@foo[i])
          })

如果我把这个课程放到data.frame中,一切都会顺利进行。

mydf <- data.frame(Numbers = new('myvector', 1:26, foo = rep(TRUE, 26)),
                   Letters = new('myvector', letters, foo = rep(FALSE, 26)))

我可以索引data.frame的行,并且使用我的myvector方法正确索引每个[个对象。您可以看到,在mydf[1:10, ]之后,@foo向量中的$Numbers广告位已被编入索引。

mydf[1:10, ]
mydf[1:10, ]$Numbers@foo

但是,如果我使用data.table尝试相同的操作,则包含的向量会被编入索引,但@foo不会被编入索引。

library(data.table)
mydt <- data.table(Numbers = new('myvector', 1:26, foo = rep(TRUE, 26)),
                   Letters = new('myvector', letters, foo = rep(FALSE, 26)))

mydt[1:10, ]
mydt[1:10, ]$Numbers@foo

似乎默认的[.vector方法应用于data.table,而不是我的特定myvector [方法。有趣的是,@foo广告位不会消失,NumbersLetters向量各自保留其类,只是@foo没有被编入索引。

data.table是否总是使用它自己的内置向量索引或什么?我可以做些什么来说服data.table使用我的[方法吗?

0 个答案:

没有答案