data.table v1.9.5(R)中shift()函数的奇数行为

时间:2015-04-23 23:39:44

标签: r data.table

我正在使用data.table(v1.9.5)的当前开发版本,主要是因为它拥有精彩的内置shift()函数。

我注意到,当我尝试在data.table通话中对语句进行分组时 - 其中一个是对shift()的调用 - 我从中获得了一些时髦的行为:

library(data.table)

foo = data.table(x = c(1, 5, 6 ,2, 9, 8))

foo[, y := {
        delta = c(NA, diff(x));
        lag = shift(x, n = 1L, fill = NA);
        list(delta/lag)}]

上述添加y的尝试会引发以下错误:

Error in delta/lag : non-numeric argument to binary operator

所以,我只是创建deltalag而不试图与他们进行互动来检查我得到的内容:

foo[, c('delta', 'lag') := 
      list(c(NA, diff(x)),
           shift(x, n = 1L, fill = NA))]
foo
   x delta               lag
1: 1   NA  NA, 1, 5, 6, 2, 9
2: 5    4  NA, 1, 5, 6, 2, 9
3: 6    1  NA, 1, 5, 6, 2, 9
4: 2   -4  NA, 1, 5, 6, 2, 9
5: 9    7  NA, 1, 5, 6, 2, 9
6: 8   -1  NA, 1, 5, 6, 2, 9

如果我将呼叫分开,我可以得到我想要的内容:

foo[, delta := c(NA, diff(x))]
foo[, lag := shift(x, n = 1L, fill = NA)]

foo
   x delta lag
1: 1   NA   NA
2: 5    4    1
3: 6    1    5
4: 2   -4    6
5: 9    7    2
6: 8   -1    9

这是一个错误还是我错过了什么?

编辑:正如Pascal指出的那样,我的初始示例中的错误是shift()返回列表的结果。

0 个答案:

没有答案