如何在R中迭代的函数中包含停止规则?
假设我们有以下函数:一个计算欧几里德距离,另一个计算k-均值算法如何在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,])
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
。在我提供的示例代码中,您是否知道如何实现这一点?