为什么rbindXts的dup参数没有暴露?

时间:2015-07-08 10:41:43

标签: r xts

我想rbind一堆xts对象,不重叠,但如果它们重叠,我不希望它添加两行:从中选择非此即彼。 (我目前正在duplicated(index(x)),然后将其删除。)

(显示问题的示例代码和所需的输出如下)。

四处寻找,我发现C source有一个dup参数;默认为FALSE,当我将其设置为TRUE时,我得到了我想要的行为:

.External("rbindXts", dup = T, x,y,z, PACKAGE = "xts")

有没有充分的理由在rbind()界面中没有曝光? (好的"原因我的意思是沿着它的路线被称为有缺陷,或者在大数据上的表现非常差,或类似的东西。)或者更实际的原因,例如没有人有有时间为它编写测试和文档吗?

更新 我回到了我的代码,发现我实际上并没有使用rbind.xts,而是由于rbind.xts中的内存问题而导致此处描述的do.call.rbind()函数:https://stackoverflow.com/a/9729804/841830

(我也在三年前找到了我自己的(!)问题,其中描述了我如何删除重复项:How to remove a row from zoo/xts object, given a timestamp

更新#2:

可以修改

do.call.rbind以使用External调用:

do.call.rbind.xts.no_dup <- function(lst) {
  while(length(lst) > 1) {
    idxlst <- seq(from=1, to=length(lst), by=2)
    lst <- lapply(idxlst, function(i) {
      if(i==length(lst)) { return(lst[[i]]) }
      return(.External("rbindXts", dup = T, lst[[i]], lst[[i+1]], PACKAGE = "xts"))
    })
  }
  lst[[1]]
}

我使用此处显示的相同测试数据对此进行了测试:https://stackoverflow.com/a/12029366/841830,它具有相同的性能,并生成相同的280万行xts对象,为do.call.rbind(这很好)。当然,测试数据没有重复,所以可能不是一个公平的测试?

x <- xts(1:10, Sys.Date()+1:10)
y <- xts(50:55,Sys.Date() + (-1:-6))
z <- xts(20:25,Sys.Date() + (-2:+3))
rbind(x,y,z)

这给出了以下输出(***显示了不需要的行)

2015-07-02   55
2015-07-03   54
2015-07-04   53
2015-07-05   52
2015-07-06   51
2015-07-06   20   ***
2015-07-07   50
2015-07-07   21   ***
2015-07-08   22
2015-07-09    1
2015-07-09   23   ***
2015-07-10    2
2015-07-10   24   ***
2015-07-11    3
2015-07-11   25   ***
2015-07-12    4
2015-07-13    5
2015-07-14    6
2015-07-15    7
2015-07-16    8
2015-07-17    9
2015-07-18   10

.External("rbindXts", dup = T, x,y,z, PACKAGE = "xts")给出:

2015-07-02   55
2015-07-03   54
2015-07-04   53
2015-07-05   52
2015-07-06   51
2015-07-07   50
2015-07-08   22
2015-07-09    1
2015-07-10    2
2015-07-11    3
2015-07-12    4
2015-07-13    5
2015-07-14    6
2015-07-15    7
2015-07-16    8
2015-07-17    9
2015-07-18   10

1 个答案:

答案 0 :(得分:1)

the commit where it was added,它似乎是实验性的。所以它没有因为实际原因而曝光:它未经测试/未记录。