繁体   English   中英

对于R data.table,我如何确定当前顺序

[英]For an R data.table, how do I determine the current ordering

我正在寻找setorder()的功能,该功能可以实现key()函数对setkey()的功能。 也就是说,我在fn3的第一行中输入什么? 就目前而言,fn1()的输出的最后一行是1:10而不是10:1

fn1 <- function() {
  dt1 <- data.table(a = 1:10, b = 10:1)

  setkey(dt1, a)
  print(dt1[, b])
  fn2(dt1)
  print(dt1[, b])

  setorder(dt1, a)
  print(dt1[, b])
  fn3(dt1)
  print(dt1[, b])
}
fn2 <- function(dt2) {
  keys <- key(dt2)
  setkey(dt2, b)
  setkeyv(dt2, keys)
}
fn3 <- function(dt2) {
  #How do I extract the current ordering of dt2? e.g., ord <- getorder(dt2)
  setorder(dt2, b)
  #Restore the original ordering of dt2: setorderv(dt2, ord)
}

像这样吗

if(is.unsorted(dt2[,a])){
  ord <- "b"
} else {
  ord <- "a"
}

查看?is.unsorted()

data.table有一个未导出的函数,称为is.sorted ,可以完成您想要的操作。 当然,不建议依赖未导出的函数,因为它们可以在不通知的情况下进行更改。 它要求您首先了解可以使用哪些列对表进行排序。

data.table:::is.sorted(dt, 'a')
# [1] TRUE
# Warning message:
# In data.table:::is.sorted(dt1, "a") :
#   Use 'if (length(o<-forderv(DT,by))) ...' for efficiency in one step, so you have o as well if not sorted.

请注意警告,因为即使在内部它并没有真正使用过。 根据源代码中的注释:

仅在此处供用户/调试用于检查/测试有效密钥; 例如data.table:::is.sorted(DT,by)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM