最大长度或常数

时间:2019-07-12 13:19:47

标签: r indexing data.table

我有一个向量v,它是为data.table中的每个组动态创建的,例如:

x[,i[v[1:n]], by=.(group)]

每个组的v长度是不同的,因此我不能在data.table之外定义length(v)

常数n给出了我感兴趣的v的最高元素。在n <= length(v)的情况下,没有问题,我可以查询

v[1:n]

但是,当n>length(v)时,我称为不存在的索引。因此,我需要可以在f(n)中使用的函数v[1:f(n)]使其返回

v[1:length(v)] if n>length(v)
v[1:n] if n<=length(v)

我可以在索引中写一个ifelse(.),但这很冗长。我想知道是否有一个功能可以做到这一点。在matlab中,向量的长度有一个变量end。我自己编写函数很困难,因为在data.table外部执行v是没有意义的。

1 个答案:

答案 0 :(得分:0)

我们可以使用pmin来检查'n'和'v'之间的长度。如果'n'小于'v'的length,则使用'n',而当'n'大于'v'的长度时,则使用'v'

n1 <- pmin(n, length(v))
v[seq_len(n1)]

关于data.table中的OP'问题。

x[, {
      n1 <- pmin(n, length(v))
      i[v[seq_len(n1]]
      },
              by=.(group)]