我有一个向量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
是没有意义的。
答案 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)]