找到到集合的最小距离
我有两组,A 和 B,都包含一些粒子的位置。我想要做的是以下内容:
For each element a in A,
Calculate the minimum distance between a and the elements of B.
Put these distances in to a list and return.
我知道如何用外观来做到这一点,但我不知道如何使用data.table语法快速地做到这一点 。
回答
我们可以使用sapply循环 'A',min abs从 'B' 向量中获取olute 差异并将其存储为vector
sapply(A, function(x) min(abs(x - B)))
或者使用data.table语法
dt1[, lapply(A, function(x) min(abs(x - B)))]
如果向量被排序,一个快速的选项是 findInterval
A[findInterval(A, B)]
如果这些是列 data.table
dt1[, A[findInterval(A, B)]]
或使用 outer
outer(A, B, FUN = function(x, y) min(abs(x - y)))