missing value where TRUE/FALSE needed
Does this look similar to the error you are getting:
while(NA == TRUE) 1
Error in while (NA == TRUE) 1 : missing value where TRUE/FALSE needed SO 'notconverged' is probably equal to NA. BTW, what is the value of 'tol'; I do not see it defined. So when computing 'notconverged' you have generated an NA. You can test it to see if this is true. You can use the following command: options(error=utils::recover) and then learn how to use the 'browser' to examine variables when the error occurs. On Fri, Dec 23, 2011 at 5:44 AM, Michael Pearmain
<michael.pearmain at gmail.com> wrote:
Merry Xmas to all, I am writing a function and curiously this runs sometimes on one data set and fails on another and i cannot figure out why. Any help much appreciated. If i run the code below with data <- iris[ ,1:4] The code runs fine, but if i run on a large dataset i get the following error (showing data structures as matrix is large)
str(cluster.data)
?num [1:9985, 1:811] 0 0 0 0 0 0 0 0 0 0 ... ?- attr(*, "dimnames")=List of 2 ?..$ : NULL ?..$ : chr [1:811] "1073949105" "1073930585" "1073843224" "1073792624" ... #(This is intended to be chr)
str(iris)
'data.frame': 150 obs. of ?5 variables: ?$ Sepal.Length: num ?5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... ?$ Sepal.Width : num ?3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... ?$ Petal.Length: num ?1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... ?$ Petal.Width : num ?0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... ?$ Species ? ? : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
str(as.matrix(iris[,1:4]))
?num [1:150, 1:4] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
?- attr(*, "dimnames")=List of 2
?..$ : NULL
?..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
n.cols <- ncol(data)
?n.rows <- nrow(data)
?X <- as.matrix(data)
?stepsize <- 0.05
?c1 <- (2 * pi) ** (n.cols / 2)
?c2 <- n.rows * (smoothing ** (n.cols + 2))
?c3 <- n.rows * (smoothing ** n.cols)
?Kexp <- function(sqs){
? ?return (exp((-1 * sqs) / (2 * smoothing ** 2)))
?}
?FindGradient <- function(x){
? ?XmY <- t(x - t(X))
? ?sqsum <- rowSums(XmY * XmY)
? ?K <- sapply(sqsum, Kexp)
? ?dens <- ((c1 * c3) ** -1) * sum(K)
? ?grad <- -1 * ((c1 * c2) ** -1) * colSums(K * XmY)
? ?return (list(gradient = grad,
? ? ? ? ? ? ? ? density = dens))
?}
?attractors <- matrix(0, n.rows, n.cols)
?densities <- matrix(0, n.rows)
density.attractors <-
? ?sapply(rep(1:n.rows), function(i) {
? ? ?notconverged <- TRUE
? ? ?# For each row loop through and find the attractor and density value.
? ? ?x <- (X[i, ])
? ? ?iters <- as.integer(1)
? ? ?# Run gradient ascent for each point to obtain x*
? ? ?while(notconverged == TRUE) {
? ? ? ?find.gradient <- FindGradient(x)
? ? ? ?next.x <- x + stepsize * find.gradient$gradient
? ? ? ?change <- sqrt(sum((next.x - x) * (next.x - x)))
? ? ? ?notconverged <- ifelse(change > tol, TRUE, FALSE)
? ? ? ?x <- next.x
? ? ? ?iters <- iters + 1
? ? ?}
? ? ?# store the attractor and density value
? ? ?return(c(densities[i, ] <- find.gradient$density,
? ? ? ? ? ? ? attractors[i, ] <- x))
? ?})
Error in while (notconverged == TRUE) { :
?missing value where TRUE/FALSE needed
Any help would be great Mike ? ? ? ?[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.