根据标准将向量中的每个值与所有其他值进行比较

Comparing each value in a vector to all other values based on criteria

我有一个唯一值向量,但我只想获得满足特定条件且至少有一个其他值的向量。 例如,如果我有一个像这样的向量

v <- c(1,2,5,6,8,10,15,16)

而我要满足的条件是向量中至少有一个其他值且它们之间相差 1 的所有值,结果将是

1,2,5,6,15,16

我希望能够用不同的函数来完成。所以对于这个例子,我们假设我使用一个函数来计算两个给定数字之间的绝对差值:

AbsDiff <- function(x,y){
           abs(x-y)
           }

所以解决方案应该运行 AbsDiff 每个值与所有其他值的函数,并获得所需的结果。

这是你的函数的一个稍微修改的版本:

m <- outer(v, v, FUN = function(x,y) abs(x-y) == 1)
v[colSums(m) > 0]
# [1]  1  2  5  6 15 16

如您所见,我向您的函数添加了一个逻辑检查,只要两个值之间的绝对差正好为 1,该检查就为 TRUE。这使得之后提取相关索引变得更加容易。


如果你想像现在这样使用你的函数,你可以这样做:

m <- outer(v, v, FUN = AbsDiff)
v[colSums(m == 1) > 0]

这意味着我们在第二步中检查 ==1。

仍然不如@docendo 解决方案,

v <- c(1,2,5,6,8,10,15,16)
x <- vector()
for(i in v){

  if((i+1) %in% v){
    x[length(x)+1] = i
    x[length(x)+1] = i+1
  }
}

x