根据标准将向量中的每个值与所有其他值进行比较
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
我有一个唯一值向量,但我只想获得满足特定条件且至少有一个其他值的向量。 例如,如果我有一个像这样的向量
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