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

在R中用reticulate调用pyclustering,get_clusters返回NULL求助

解决R中用reticulate调用pyclustering CURE返回NULL的问题

我帮你排查出两个关键问题,这就是调用get_clusters()返回NULL的核心原因:


1. 遗漏聚类核心执行步骤

pyclustering库中的所有聚类算法(包括CURE)都需要先调用process()方法来完成聚类计算逻辑。你直接创建cure实例后就调用get_clusters(),此时算法还未执行任何聚类操作,自然会返回NULL。

2. 可选优化:Python对象转R结构的小技巧

虽然你用convert=FALSE让R保留了numpy数组的Python对象格式,pyclustering可以直接识别,但后续获取结果后如果需要转为R原生数据结构,需要用py_to_r()做转换,不过这不是导致NULL的直接原因。


修正后的完整可运行代码

library(reticulate)

# 导入numpy并生成随机数据(保留Python对象格式)
np <- import("numpy", convert = FALSE)
dat <- np$random$rand(100, 2)

# 导入CURE聚类模块并初始化实例
clus_cure <- import("pyclustering.cluster.cure")
clus_res <- clus_cure$cure(dat, 2)

# 关键步骤:执行聚类计算
clus_res$process()

# 获取聚类结果(Python对象格式)
clusters_py <- clus_res$get_clusters()
# 转换为R原生列表格式(可选)
clusters_r <- py_to_r(clusters_py)

print(clusters_r)

额外注意事项

  • process()是pyclustering所有聚类算法的标准执行入口,必须在获取结果前调用;
  • 如果你的pyclustering版本较旧,API可能存在差异,建议先升级到最新稳定版;
  • 若需要获取聚类的其他输出(如聚类中心),可以调用clus_res$get_representors()等对应方法,同样要确保先执行process()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:44