r - 比较两个 vectors 最接近的越来越小的 value

假设我有两个 vectors

a <- c(5,10,12)
b <- c(4,11,15)

我想比较 a 和 b 并获得最接近每个元素的较小的 value 。最接近 5 的较小的 value 是 4,对于 10 是 4,对于 12 是 11。同样,但找到最接近的较大 value。 5 是 11,10 是 11,12 是 15。

最接近的较小 values 的所需 vector:

4 4 11

最接近的较大 values 的所需 vector:

11 11 15

我找到了另一个使用最接近包 DescTools 的函数的示例,但结果不同

> unlist(lapply(a, function(i) min(Closest(x = b, a = i))))
      [1]  4 11 11
      > unlist(lapply(a, function(i) max(Closest(x = b, a = i))))
      [1]  4 11 11

你知道我怎样才能实现我的目标吗?

回答1

这应该这样做:

> sapply(a,function(x) b[tail(which(b<x),1)])
[1]  4  4 11
> sapply(a,function(x) b[head(which(b>x),1)])
[1] 11 11 15

回答2

假设两者都是有序且唯一的:

idx <- findInterval(a, b)

a[idx]
[1]  5  5 10

b[idx+1]
[1] 11 11 15

相似文章

cuda - 使用 thrust 处理 CUDA 类中的向量?

我对thrust在C++类中的适用性有疑问。我正在尝试实现一个类对象,它接收顶点的(x,y,z)坐标作为ver1、ver2和ver3。然后,分配给一个三角形并计算面积和法向量。但是,我不太明白如何创建...