假设我有一个向量x = 1:10
,它是通过将两个其他向量a = integer(0)
和b = 1:10
串联在一起而构造的(这是一种边缘情况)。我想稍后将组合的向量再次拆分为a
和b
。我本以为可以安全地将它们分开:
i = seq_along(a)
x[i]
x[-i]
但是我发现,当我使用x[-integer(0)]
时,我得到integer(0)
的返回,而不是我天真地认为的x
本身。做这种事情的最好方法是什么?
答案 0 :(得分:2)
如果您想使用负索引,并且索引可能会退化为integer(0)
(例如,索引是根据which
计算的),请在“指数。删除“越界”值没有副作用。
x <- 1:10
i <- integer(0)
x[-c(i, 11)] ## position 11 is "out-of-bound"
# [1] 1 2 3 4 5 6 7 8 9 10
如果您麻烦设置此“越界”值,则可以使用以下规范选择:2 ^ 31
,因为该值超出了32位带符号整数的表示范围,但不是{{1 }}。
另一种方法是对Inf
进行if
测试。例如:
length(i)
警告:请勿为此目的使用功能if (length(i)) x[-i] else x
。