我有两组,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.
Run Code Online (Sandbox Code Playgroud)
我知道如何用外观来做到这一点,但我不知道如何使用data.table语法快速地做到这一点 。
我们可以使用sapply循环 'A',min abs从 'B' 向量中获取olute 差异并将其存储为vector
sapply(A, function(x) min(abs(x - B)))
Run Code Online (Sandbox Code Playgroud)
或者使用data.table语法
dt1[, lapply(A, function(x) min(abs(x - B)))]
Run Code Online (Sandbox Code Playgroud)
如果向量被排序,一个快速的选项是 findInterval
A[findInterval(A, B)]
Run Code Online (Sandbox Code Playgroud)
如果这些是列 data.table
dt1[, A[findInterval(A, B)]]
Run Code Online (Sandbox Code Playgroud)
或使用 outer
outer(A, B, FUN = function(x, y) min(abs(x - y)))
Run Code Online (Sandbox Code Playgroud)