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.
假设我有以下数据。
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.