##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (emfit, mincenter)
{
newem <- list(mu = emfit$mu, pro = emfit$pro, z = emfit$z,
groups = emfit$groups, ngroups = emfit$ngroups, center = order(abs(emfit$mu))[1])
while (newem$ngroups > 1) {
omu <- order(abs(newem$mu))
if (newem$pro[omu[1]] < mincenter) {
gl <- min(omu[1:2])
gr <- max(omu[1:2])
newem$z[, gl] <- newem$z[, gl] + newem$z[, gr]
newem$z <- matrix(ncol = ncol(newem$z) - 1, nrow = nrow(newem$z),
data = newem$z[, -gr])
newem$mu[gl] <- (newem$mu[gl] * newem$pro[gl] + newem$mu[gr] *
newem$pro[gr])/(newem$pro[gl] + newem$pro[gr])
newem$mu <- newem$mu[-gr]
newem$pro[gl] <- newem$pro[gl] + newem$pro[gr]
newem$pro <- newem$pro[-gr]
newem$groups[gl, ] <- newem$groups[gl, ] + newem$groups[gr,
]
newem$groups <- matrix(ncol = ncol(newem$groups),
nrow = newem$ngroups - 1, data = newem$groups[-gr,
])
newem$ngroups <- newem$ngroups - 1
newem$center <- gl
}
else break
}
return(newem)
}Run the code above in your browser using DataLab