[GRASS-user] Grass to R and back again (randomForest classification)

Nikos Alexandris nikos.alexandris at felis.uni-freiburg.de
Fri Jun 11 08:39:46 EDT 2010


Daniel Victoria:
> I'm trying to do a randomForest classification in a MODIS NDVI time
> series. So far I've been able to generate the randomForest and get the
> Grass NDVI images inside grass as a SpatialGridDataFrame. Then,
> following some notes from Markus Neteler [1], I converted the
> SpatialGridDataFrame to a DataFrame and sucessfully applied the
> randomForest classifier. The problem is that now I'm struglling to
> transform the DataFrame back to a grass image. What is giving me a
> headach is that the images contains lots of null values (I need to
> have a MASK in place) so, each NDVI image has 1023701 cells but the
> DataFrame has only 264647 values since the conversion from SpatialGrid
> to DataFrame skips the nulls.

> So, the question is, how to convert my DataFrame back to a Grass image?

Daniel,
so far I used the following steps:

# import raster data in R using "readRAST6" of course
x.raw <- readRAST6 (SomeRasterMap) # or readRAST6 (SomeRasterMap ,  NODATA = 
-999999 )

# use complete cases to deal with NA's
x.nonas <- complete.cases ( x at data )

# get values
x <- x.raw at data[x.nonas,]

# add new columns to "x.raw" that will be fed with... "newvalues"
x.raw at data$column1 <- NA
x.raw at data$column2 <- NA
[etc.]

# do something with your data or create new data.frame(s)

# fill in the new (empty) columns of xraw
x.raw at data$column1[x.nonas] <- new.data.frame$newslot[,"newcolumn"]
[etc.]

# write back to grass
writeRAST6(x.raw, zcol= NumberOfNewColumn, vname="SomeNameForTheRaster", 
overwrite=TRUE)

Something like that... Hope it helps,
Nikos

---
> [1] http://mpa.fbk.eu/markus/shortcourse/notes7.html

--- 
> PS - For completion sake...
> Using Grass 6.4.0RC6 in Ubuntu 9.10
> R 2.11
> 
> commands used in R:
> 
> # open images
> ndvi <- readRAST6(<list of 23 ndvi images>)
> 
> # convert to dataframe
> ndvi.df <- as.data.frame(ndvi)
> 
> class <- predict(RFmodel, ndvi.df)
> 
> # class contains 264647 classified pixels - how to get them back to an
> image?


More information about the grass-user mailing list