Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,负子集产生了意外的结果,其数值稍大_R_Subset - Fatal编程技术网

在R中,负子集产生了意外的结果,其数值稍大

在R中,负子集产生了意外的结果,其数值稍大,r,subset,R,Subset,在R中 打印((1:20)[-(15:18)]) 按预期打印从1到20(15到18除外)的整数列表 但是 print((1983:2010)[-(1992:1994)]) 打印1983年至2010年(包括1992年至1994年)的整数列表。负子集不起作用 这是怎么回事?我知道R可能会遇到非常大的数字,但我不认为这些数字非常大。 < P>这是基于数值索引的。在第二个例子中,我们没有长度大于1994的向量,但在前一个例子中,有 length(1983:2010) #[1] 28 处理此问题的方法是

在R中

打印((1:20)[-(15:18)])

按预期打印从1到20(15到18除外)的整数列表

但是

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

打印1983年至2010年(包括1992年至1994年)的整数列表。负子集不起作用


这是怎么回事?我知道R可能会遇到非常大的数字,但我不认为这些数字非常大。

< P>这是基于数值索引的。在第二个例子中,我们没有长度大于1994的向量,但在前一个例子中,有

length(1983:2010)
#[1] 28
处理此问题的方法是在%

v1 <- 1983:2010
v1[!v1 %in% 1992:1994]

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

在第一个示例中,数字15-18也占据位置15-18

在第二个例子中,数字1992-1994并不占据位置1992-1994。他们占据第10-12位。因此,您可以使用:

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

知道了。有没有一个不需要计算索引的简单修复方法?您可以执行
打印((1983:2010)[!1983:2010%in%1992:1994])
。谢谢。我不想计算他们将占据的位置。有没有一种方法可以在一行中完成?还是必须先命名列表,然后命名子集?@丢失了我发布的两个解决方案都是一行。我不知道你说的一行是什么意思。如果
v1,我想我指的是一条语句中的一行?不确定这是不是正确的命名法。我想的是neilfws在评论中所说的话并不是有意冒犯。功能上基本相同,但您认为
打印((1983:2010)[!1983:2010%in%1992:1994])
在风格上更可取吗?因为您不必命名变量,也不必将其存储在内存中,等等。这很好。在本例中,向量很小,但我可以理解为什么通常创建对象更有意义。谢谢你的帮助!
print((1983:2010)[-(10:12)])