You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用distances包的nearest_neighbor_search函数获取近邻

我懂你的需求啦——已经用distances包生成了距离矩阵,想通过nearest_neighbor_search函数高效获取每个样本排除自身后的3个最近邻,不用手动排序折腾。下面我一步步教你正确使用这个函数,还会验证结果和你手动得到的一致哦!

使用distances包的nearest_neighbor_search获取最近邻

首先先回顾你已经完成的代码(生成距离矩阵对象):

library(distances)
library(dplyr)
set.seed(42)
x <- matrix(rnorm(100), ncol = 10)
df <- as.data.frame(x)
df$id <- paste0("x_", seq.int(nrow(df)))
distances <- distances(df, id_variable = "id")

一步获取目标最近邻

nearest_neighbor_search专门用来处理distances对象,参数设置非常直观:

  • k = 3:指定要获取3个最近邻
  • exclude_self = TRUE:自动排除样本自身,不用你手动过滤

直接运行这段代码:

# 获取每个样本的3个最近邻(排除自身)
nn_results <- nearest_neighbor_search(distances, k = 3, exclude_self = TRUE)

# 查看整体结果
nn_results

查看单个样本的结果

比如你之前关注的x_1,可以直接提取它的结果:

nn_results[["x_1"]]

输出会和你手动排序得到的完全匹配:

id  distance
10     x_10 2.1809974
4       x_4 3.6430598
2       x_2 3.8431826

把结果整理成结构化数据框

如果想要更方便后续分析的表格格式,可以用purrr和dplyr把结果整合:

library(purrr)
nn_df <- map_dfr(nn_results, ~ as.data.frame(.x), .id = "target_id")

# 查看整理后的表格
nn_df

这样你会得到一个包含三列的数据集:target_id(当前样本ID)、id(最近邻ID)、distance(两者间的距离),一目了然。

为什么推荐用内置函数?

你手动排序的方法虽然能得到正确结果,但nearest_neighbor_search是包内优化过的方法,当数据集变大时,效率会比手动处理高很多,而且代码更简洁,减少出错的可能性。

内容的提问来源于stack exchange,提问作者cs0815

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:40:50