在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
相关产品推荐
相关产品推荐

