R语言中如何区分fviz_nbclust与Kmeans的同名method参数
解决R中主函数与子函数同名参数的调用问题
当主函数和其调用的子函数存在同名参数时,直接重复传参会触发R的参数匹配错误。针对你用fviz_nbclust调用amap::Kmeans时的method参数冲突问题,有两种可靠的解决方法:
方法一:用匿名函数中转参数
通过自定义匿名函数,将amap::Kmeans的method参数提前指定,再把这个匿名函数传给FUNcluster,彻底区分两个method的作用对象:
# 正确代码 fviz_nbclust( d_agg_scaled, FUNcluster = function(x, k) amap::Kmeans(x, centers = k, method = 'manhattan'), method = 'wss' )
匿名函数会接收fviz_nbclust传递的聚类数据x和聚类数k,再加上你指定的method='manhattan'一起传给amap::Kmeans,主函数的method='wss'则独立生效。
方法二:用部分应用函数固定子函数参数
借助purrr包的partial函数,创建一个预先绑定了method='manhattan'的Kmeans衍生函数,再传给FUNcluster:
library(purrr) # 创建固定了method参数的Kmeans衍生函数 my_kmeans <- partial(amap::Kmeans, method = 'manhattan') # 调用fviz_nbclust fviz_nbclust(d_agg_scaled, FUNcluster = my_kmeans, method = 'wss')
这种写法更简洁,partial会帮你封装好子函数的专属参数,避免和主函数参数冲突。
内容的提问来源于stack exchange,提问作者Mike S
相关产品推荐
相关产品推荐

