Dear all, I have a vector with a certain range of values including infinity and NA. I would like to remove the values that are outside a given range (lower level = ll and upper level = ul) but I am getting the error due to the NA values (missing value where TRUE/FALSE needed). I then included the !is.na() but now the resulting error is all NA, as in the example. In addition, here I have implemented a for loop to scan all the elements of the vector, but I should be able to use the sapply(); however I don't know how to send the ll and ul arguments to sapply(). Could you please help? best regards Luigi
EXAMPLE x <- c(-Inf, Inf, NA, 5.9, 6.08, 5281391136138.75, 4.35, 4.79, 9474097322.96, 3.64, 16.42, -12211.11, 4.37, -1097.79, 4.78, 3.71, 32.59, 4.01, 35.36, 3.17, 1.61, -3678.28, 2.9, 4.67, 4.1, 348410866.78, 5.35, 4.3101519459837E+016, 1467030866.75, 1.10376094956278E+018, 32.55, 1.17, 5339028670388.94, 34.14, 33205967009.57, 4.42, 1.76, 7.08, -8428.84, -113491.08, 17.81) ll <- 1 ul <- 45 clipper <- function(x, ll, ul) { for(i in 1:length(x)) { if(x[i] < ll) { x[i] <- NA } else if(x[i] > ul) { x[i] <- NA } else { x[i] <- x[i] } } return(x) } (X<-clipper(x, ll, ul)) > missing value where TRUE/FALSE needed clipper <- function(x, ll, ul) { for(i in 1:length(x)) { if(!is.na(x[i]) < ll) { x[i] <- NA } else if(!is.na(x[i]) > ul) { x[i] <- NA } else { x[i] <- x[i] } } return(x) } (X<-clipper(x, ll, ul)) [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [28] NA NA NA NA NA NA NA NA NA NA NA NA NA NA ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.