在R中,负数子集产生意外结果,数字略大

时间:2017-08-31 03:53:11

标签: r subset

在R中,

print((1:20)[-(15:18)])

除了15到18之外,

打印从1到20的整数列表,如预期的那样。

但是

print((1983:2010)[-(1992:1994)])

打印从1983年到2010年的整数列表,包括1992年到1994年。否定子集不起作用。

这里发生了什么?我知道R可能会遇到极大数字的问题,但我不认为这些数字非常大。

2 个答案:

答案 0 :(得分:0)

这是基于数字索引。在第二个例子中,我们没有长度为>的向量。 1994年,但在前一种情况下,有

length(1983:2010)
#[1] 28

使用%in%

处理此问题的方法
v1 <- 1983:2010
v1[!v1 %in% 1992:1994]

或者根据vector

的原始长度使用索引
v1[-((length(v1)-2):length(v1))]

答案 1 :(得分:0)

方括号中的值是指向量中数字的位置,而不是数字本身。

在你的第一个例子中,数字15-18也占据15-18的位置。

在你的第二个例子中,1992-1994号码不占据1992-1994的位置。他们占据10-12的位置。所以你可以使用:

print((1983:2010)[-(10:12)])