我有一个唯一值的向量,但我只想得到那些满足特定条件的至少一个其他值。 例如,如果我有一个像这样的向量
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