R 冒号 v. 中函数内子集的参数大于或等于

Arguments for Subset within a function in R colon v. greater or equal to

假设我有以下数据。

x<- c(1,2, 3,4,5,1,3,8,2)
y<- c(4,2, 5,6,7,6,7,8,9)
data<-cbind(x,y)

    x   y
1   1   4
2   2   2
3   3   5
4   4   6
5   5   7
6   1   6
7   3   7
8   8   8
9   2   9  

现在,如果我将此数据子集化为 select 只有 "x" 在 1 和 3 之间的观察结果,我可以这样做:

s1<- subset(data, x>=1 & x<=3)

并获得我想要的输出:

    x   y
1   1   4
2   2   2
3   3   5
4   1   6
5   3   7
6   2   9

但是,如果我使用冒号运算符进行子集化,则会得到不同的结果:

s2<- subset(data, x==1:3)

    x   y
1   1   4
2   2   2
3   3   5

这次它只包括 "x" 为 1,2 或 3 的第一个观察值。为什么? 我想使用“:”运算符,因为我正在编写一个函数,因此用户可以输入一系列值,她希望从这些值中查看根据 "y" 变量计算的平均值。如果他们可以使用“:”运算符将此参数传递给我的函数内的子集函数,我会更愿意,但我不知道为什么用“:”进行子集化会给我不同的结果。

对于这方面的任何建议,我将不胜感激。

您可以使用 %in% 而不是 ==

 subset(data, x %in% 1:3)

一般来说,如果我们比较两个大小不等的向量,将使用 %in%。在某些情况下,如果其中一个向量的长度是第二个向量的两倍,我们可以利用回收(它也可能失败)。一些带有一些描述的例子是 here.