测试两个向量在R中是增加还是减少

测试两个向量在R中是增加还是减少,r,function,vector,R,Function,Vector,我想知道是否有一种方法可以在基数R中测试两个向量(它们都)是增加还是减少 例如,当测试a和b(见下文)时,测试应返回FALSE,当测试c和d(见下文)时,测试应返回TRUE 为清楚起见,我要求任何两个向量(当两个向量都已排序但不考虑其长度)如果正在减少(例如10:0,100:97,-8:-10),则测试应返回TRUE,否则如果两个向量都再次增加,则测试应返回TRUE,else应该返回FALSE。两个向量都在增加 “两个向量都在减少”将是 all(diff(x)根据@parvin的说法,“增加”的

我想知道是否有一种方法可以在基数R中测试两个向量(它们都)是增加还是减少

例如,当测试
a
b
(见下文)时,测试应返回
FALSE
,当测试
c
d
(见下文)时,测试应返回
TRUE

为清楚起见,我要求任何两个向量(当两个向量都已排序但不考虑其长度)如果正在减少(例如
10:0
100:97
-8:-10
),则测试应返回TRUE,否则如果两个向量都再次增加,则测试应返回TRUE,else应该返回FALSE。

两个向量都在增加

“两个向量都在减少”将是


all(diff(x)根据@parvin的说法,“增加”的定义只是“有增加的趋势”。因此我建议使用
diff
,而不是
lm

假设我有两个数值向量,
x
y
,下面是我的解决方案:

unname(!xor(lm(x ~ seq_along(x))$coefficient[2] > 0, lm(y ~ seq_along(y))$coefficient[2] > 0))

xor
正好满足了我们的需要,这样我们就可以避免将两个语句与
|
组合使用
unname
来简单地删除系数名称。

为什么5:10不增加?编辑:现在我明白了,编辑后,测试(a,b)和(c,d)如果
x
在增加,那么
y
是否也必须增加才能成为
真的
?或者
x
y
可以朝不同的方向发展,只要它们是单调的?我没有投反对票,但你的问题不是很清楚。请举例说明不同的输入和输出,以确保人们了解我能理解你在问什么。这是一个多么重要的问题!!对不起,我不知道谁和为什么这个问题被否决了!好吧,我认为Ben的答案不适用于递减向量(试试看)。如果你的问题不清楚,你会得到不符合你要求的答案,这不是回答者的错。修改它使其看起来像一个函数可能会有帮助,因为它适用于任意两个向量?Ben,你的答案有一个问题,用它做一个简单的函数:
uneq.vec=function(x,y)all(diff(x)>0)&&all(diff(y)>0)
然后测试OP的要求。例如,当两个向量减少时,公式会失败:
uneq.vec(x=10:5,y=4:0)
,在这种情况下,OP需要一个TRUE,而您的公式返回FALSE。此解决方案有一个缺点,因为它需要严格增加才能为TRUE。然而,根据@parvin,
uniq.vec(c(1,2,1,4,5),c(5:10))
也应该为TRUE而不是FALSE。OP对此没有特别清楚(他们接受了我的答案).我宁愿他们用具体的例子来编辑他们的问题,以确认“有一个增加的趋势”是什么意思;这是否意味着,例如,线性回归的斜率是正的?是的,我知道这不是很清楚。所以我想说,在给出答案之前,一定要让OP澄清问题。
all(diff(x)>0) && all(diff(y)>0)
all(diff(x)<0) && all(diff(y)<0)
unname(!xor(lm(x ~ seq_along(x))$coefficient[2] > 0, lm(y ~ seq_along(y))$coefficient[2] > 0))