我有一个唯一值的向量,但我想只获得满足至少一个其他值的特定条件的向量。 例如,如果我有一个像这样的矢量
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
函数,并获得所需的结果。
答案 0 :(得分:2)
这是您功能的略微修改版本:
m <- outer(v, v, FUN = function(x,y) abs(x-y) == 1)
v[colSums(m) > 0]
# [1] 1 2 5 6 15 16
正如您所看到的,只要两个值之间的绝对差值正好为1,我就为您的函数添加了一个逻辑检查。这样就可以更容易地提取相关的索引。
如果你想现在使用你的功能,你可以这样做:
m <- outer(v, v, FUN = AbsDiff)
v[colSums(m == 1) > 0]
这意味着我们在第二步中检查== 1.
答案 1 :(得分:0)
还不如@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