Kmeans может занимать только количество кластеров или центров, но не оба. А в функции вы постоянно присваиваете что-то из окружения, что противоречит цели функции. Попробуйте что-то вроде этого:
set.seed(345)
KmeansClustering<-function(Datapoints,ncluster=NULL,initialClusters=NULL,maxiter) {
if(!is.null(ncluster) & !is.null(initialClusters)){
stop("only provide ncluster or initialCluster, not both")
}
if(!is.null(ncluster)){
KmeansOut<-kmeans(Datapoints, ncluster,maxiter)
}else{
KmeansOut<-kmeans(Datapoints,initialClusters,maxiter)
}
return(KmeansOut)
}
set.seed(100)
# use 3 observations as initial centers
ini_centers = iris[sample(nrow(iris),3),-5]
#works
KmeansClustering(iris[,-5],ncluster=3,maxiter=10)
#works
KmeansClustering(iris[,-5],initialClusters=ini_centers,maxiter=10)
#error
KmeansClustering(iris[,-5],ncluster=3,initialClusters=ini_centers,maxiter=10)