如何在R中迭代的函数中包含停止规则?

如何在R中迭代的函数中包含停止规则?,r,function,k-means,R,Function,K Means,假设我们有以下函数:一个计算欧几里德距离,另一个计算k-均值算法 euclid <- function(points1, points2) { distanceMatrix <- matrix(NA, nrow=dim(points1)[1], ncol=dim(points2)[1]) for(i in 1:nrow(points2)) { distanceMatrix[,i] <- sqrt(rowSums(t(t(points1)-points2[i,])

假设我们有以下函数:一个计算欧几里德距离,另一个计算k-均值算法

euclid <- function(points1, points2) {
  distanceMatrix <- matrix(NA, nrow=dim(points1)[1], ncol=dim(points2)[1])
  for(i in 1:nrow(points2)) {
    distanceMatrix[,i] <- sqrt(rowSums(t(t(points1)-points2[i,])^2))
  }
  distanceMatrix
}

K_means <- function(x, centers, distFun, nItter) {
  clusterHistory <- vector(nItter, mode="list")
  centerHistory <- vector(nItter, mode="list")
  
  for(i in 1:nItter) {
    distsToCenters <- distFun(x, centers)
    clusters <- apply(distsToCenters, 1, which.min)
    centers <- apply(x, 2, tapply, clusters, mean)
    # Saving history
    clusterHistory[[i]] <- clusters
    centerHistory[[i]] <- centers
  }
  
  list(clusters=clusterHistory, centers=centerHistory)
}

test=data # A data.frame
ktest=as.matrix(test) # Turn into a matrix
centers <- ktest[sample(nrow(ktest), 5),] # Sample some centers, 5 for example

res <- K_means(ktest, centers, euclid, 100) # 100 iterations

euclid类似于
if(…)break
?Check
?Check
@ekoam,我想您的意思是指
?break
。在我提供的示例代码中,您是否知道如何实现这一点?