>>>> Hi, >>>> in the last days i had an error during the computation of a >>>> morfological clustering on a dtm, >>>> thanks to R.Bivand and his suggestions i've resolved it. >>>> >>>> error was generated by a large presence of Nas ( the sea >>>> surface ) on my scene: >>>> http://img299.imageshack.us/img299/1619/immagine8gg6.png >>>> >>>> The problem is firstly that there are NAs in morph, and then >>>> that the string listing the row numbers of the NAs exceeds 8K >>>> characters >>>> (my earlier message : Errore in sprintf(fmt, ...) : La lunghezza >>>> della stringa eccede la dimensione del buffer di 8192) >>>> >>>> So the right procedure is to try clara on morph once you have >>>> omitted the NAs. >>>> If the NAs are for all variables in a row, coercing from >>>> SpatialGridDataFrame to >>>> SpatialPixelsDataFrame will work, >>>> if only some, we need to set the whole row to NA, coerce, >>>> cluster, add the clara results to the >>>> SpatialPixelsDataFrame, coerce back to SpatialGridDataFrame, >>>> then back to >>>> GRASS. >>>> >>>> >>>> ##My system configuration: >>>> >>>> R version 2.4.0 (2006-10-03) >>>> powerpc-apple-darwin8.7.0 >>>> locale: >>>> C >>>> attached base packages: >>>> [1] "methods" "stats" "graphics" "grDevices" "utils" >>>> "datasets" >>>> [7] "base" >>>> other attached packages: >>>> spgrass6 rgdal maptools foreign sp cluster >>>> "0.3-4" "0.5-3" "0.6-5" "0.8-18" "0.9-4" "1.11.4" >>>> >>>> ##This is the log of previous error: >>>> >>>> ... >>>> ... >>>> names(morph) <- c >>>> ("er","crosc","longc","slope_n","profc","minic","maxic") >>>> morph.clara <- clara(morph, k=5, stand=F) >>>> Errore in clara(morph, k = 5, stand = F) : >>>> Observations >>>> 1929241,1931311,1933381,1935451,1937521,1939591,1941661,1943731,194 >>>> 58 >>>> 01,1947871,........................................................ >>>> .. >>>> .............44521,2146591,2148661,2150731,2152801,2154871,2156941 >>>> ,2159011,2161081,2163151,2165221,2167291,2169361,2171431 >>>> traceback() >>>> 2: stop(ngettext(length(i), sprintf("Observation %d >>>> has", i[1]), >>>> sprintf("Observations %s have", paste(i, >>>> collapse = ","))), >>>> " *only* NAs --> omit for clustering") >>>> 1: clara(morph, k = 5, stand = F) >>>> >>>> >>>> >>>> >>>> ##this code fix the problem: >>>> >>>> >>>> library(spgrass6) >>>> x <- readRAST6(c ('$map_1,..,$map_N')) >>>> save(x, file="geomorphological.RData", compress=TRUE) >>>> rm(x) >>>> gc() >>>> >>>> >>>> # copies the GridTopology object from its slot in x, >>>> to use later on; it is the current GRASS region >>>> >>>> grd <- [EMAIL PROTECTED] >>>> >>>> # Sets or retrieves projection attributes on classes >>>> extending SpatialData >>>> # again copying from x so as to allow x to be removed from the >>>> # workspace. It read the projection info and apply it to the >>>> x data >>>> >>>> proj <- [EMAIL PROTECTED] >>>> >>>> # copying the data slot (in R >= 2.4.0 a data frame) out to >>>> xx; for some >>>> # reason getting it in other ways made a copy of it, so this >>>> saves space. >>>> >>>> xx <- [EMAIL PROTECTED] >>>> >>>> rm(x) >>>> gc() >>>> library(cluster) >>>> >>>> # makes a logical vector saying which rows are all NAs >>>> (FALSE), and >>>> # which are not (TRUE). >>>> >>>> NArow <- apply(xx, 1, function(x) !(all(is.na(x)))) >>>> >>>> # create xx1 object (my data without Nas) >>>> # selects the rows for which NArow is TRUE. >>>> >>>> xx1 <- xx[NArow,] >>>> >>>> rm(xx) >>>> gc() >>>> res <- clara(xx1, k='$clusters', metric="'$metric'", >>>> stand='$stand', sampsize='$sampsizes', trace='$trace', >>>> samples='$samples', >>>> medoids='$medoids', keep.data='$keepdata', rngR='$rngR') >>>> gc() >>>> rm(xx1) >>>> gc() >>>> >>>> # object name out_class, an integer vector of NAs the same >>>> length as NArow. >>>> >>>> out_class <- as.integer(rep(NA, length(NArow))) >>>> >>>> # Inserts the results of res$clustering - c() removes the >>>> unecessary names - >>>> # into the elements of out_class for which NArow is TRUE (so >>>> the elements >>>> # corresponding to all NA inputs are NA in the output). >>>> >>>> out_class[NArow] <- c(res$clustering) >>>> >>>> # out is a SpatialGridDataFrame, with the same region as x, >>>> same projection >>>> # as x, but only the classification output (correctly >>>> assigned to elements >>>> # with regard to NAs in the input) in its data slot. >>>> >>>> out <- SpatialGridDataFrame(grd, >>>> proj4string=proj,data=data.frame(cls=out_class)) >>>> >>>> >>>> save(out, file="klust_out.RData", compress=TRUE) >>>> library(rgdal) >>>> writeGDAL(out, fname="clust.tif", drivername="GTiff", type="Byte") >>>> gc() >>>> >>>> i hope this is usefool >>>> >>>> regards, >>>> Massimo
_______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo