Rui Esteves
2012-Jan-14 00:57 UTC
[R] Error: unexpected '<' in "<" when modifying existing functions
Hi. I am trying to modify kmeans function. It seems that is failing something obvious with the workspace. I am a newbie and here is my code: myk = function (x, centers, iter.max = 10, nstart = 1, algorithm c("Hartigan-Wong", + "Lloyd", "Forgy", "MacQueen")) + { + do_one <- function(nmeth) { + Z <- switch(nmeth, { + Z <- .Fortran(R_kmns, as.double(x), as.integer(m), + as.integer(ncol(x)), centers = as.double(centers), + as.integer(k), c1 = integer(m), integer(m), nc = integer(k), + double(k), double(k), integer(k), double(m), + integer(k), integer(k), as.integer(iter.max), + wss = double(k), ifault = 0L) + switch(Z$ifault, stop("empty cluster: try a better set of initial centers", + call. = FALSE), warning(gettextf("did not converge in %d iterations", + iter.max), call. = FALSE, domain = NA), stop("number of cluster centres must lie between 1 and nrow(x)", + call. = FALSE)) + Z + }, { + Z <- .C(R_kmeans_Lloyd, as.double(x), as.integer(m), + as.integer(ncol(x)), centers = as.double(centers), + as.integer(k), c1 = integer(m), iter = as.integer(iter.max), + nc = integer(k), wss = double(k)) + myIter=Z$iter + if (Z$iter > iter.max) warning("did not converge in ", + iter.max, " iterations", call. = FALSE) + if (any(Z$nc == 0)) warning("empty cluster: try a better set of initial centers", + call. = FALSE) + Z + + }, { + Z <- .C(R_kmeans_MacQueen, as.double(x), as.integer(m), + as.integer(ncol(x)), centers = as.double(centers), + as.integer(k), c1 = integer(m), iter = as.integer(iter.max), + nc = integer(k), wss = double(k)) + if (Z$iter > iter.max) warning("did not converge in ", + iter.max, " iterations", call. = FALSE) + if (any(Z$nc == 0)) warning("empty cluster: try a better set of initial centers", + call. = FALSE) + Z + }) + Z + } + x <- as.matrix(x) + m <- nrow(x) + if (missing(centers)) + stop("'centers' must be a number or a matrix") + nmeth <- switch(match.arg(algorithm), `Hartigan-Wong` = 1, + Lloyd = 2, Forgy = 2, MacQueen = 3) + if (length(centers) == 1L) { + if (centers == 1) + nmeth <- 3 + k <- centers + if (nstart == 1) + centers <- x[sample.int(m, k), , drop = FALSE] + if (nstart >= 2 || any(duplicated(centers))) { + cn <- unique(x) + mm <- nrow(cn) + if (mm < k) + stop("more cluster centers than distinct data points.") + centers <- cn[sample.int(mm, k), , drop = FALSE] + } + } + else { + centers <- as.matrix(centers) + if (any(duplicated(centers))) + stop("initial centers are not distinct") + cn <- NULL + k <- nrow(centers) + if (m < k) + stop("more cluster centers than data points") + } + if (iter.max < 1) + stop("'iter.max' must be positive") + if (ncol(x) != ncol(centers)) + stop("must have same number of columns in 'x' and 'centers'") + Z <- do_one(nmeth) + best <- sum(Z$wss) + if (nstart >= 2 && !is.null(cn)) + for (i in 2:nstart) { + centers <- cn[sample.int(mm, k), , drop = FALSE] + ZZ <- do_one(nmeth) + if ((z <- sum(ZZ$wss)) < best) { + Z <- ZZ + best <- z + } + } + centers <- matrix(Z$centers, k) + dimnames(centers) <- list(1L:k, dimnames(x)[[2L]]) + cluster <- Z$c1 + if (!is.null(rn <- rownames(x))) + names(cluster) <- rn + totss <- sum(scale(x, scale = FALSE)^2) + print(Z$iter) + structure(list(cluster = cluster, centers = centers, totss = totss, + withinss = Z$wss, tot.withinss = best, betweenss = totss - + best, size = Z$nc, iter = Z$iter), class = "kmeans") + }> <environment: namespace:stats>Error: unexpected '<' in "<"
Peter Langfelder
2012-Jan-14 01:05 UTC
[R] Error: unexpected '<' in "<" when modifying existing functions
On Fri, Jan 13, 2012 at 4:57 PM, Rui Esteves <ruimaximo at gmail.com> wrote:> Hi. > I am trying to modify kmeans function. > It seems that is failing something obvious with the workspace. > I am a newbie and here is my code:>> <environment: namespace:stats> > Error: unexpected '<' in "<"Do not include the last line <environment: namespace:stats> it is not part of the function definition. Simply leave it out and your function will be defined in the user workspace (a.k.a. global environment). HTH Peter
Reasonably Related Threads
- Empty cluster / segfault using vanilla kmeans with version 2.15.2
- Empty cluster / segfault using vanilla kmeans with version 2.15.2
- K-means results understanding!!!
- loglin( tab, margin, start = bad.start ) kills R (PR#7123)
- Help regarding kmeans output. need to save the clusters into different directories/folders.