Tara,
raster_ct<- rasterize(coord.plus.value_sp, r,
fun=function(value)?{length(unique(na.omit(value)))})
This is wrong on two accounts. You do not use the "..." argument and you do
not pass the vector "value" to rasterize (instead, you redefine it inside
"fun")
It should be:
library(raster)
r <- raster(ncol=10, nrow=10)
x <- c(-45, -45, -45, 30, 30, 20, -10, 50, -7)
y <- c(-25, -25, -25, 148, -148, 46, 23, 0, -69)
xy <- cbind(x,y)
species <- c(1, 2, 3, 1, 2, 3, 1, 1, 1)
x1 <- rasterize(xy, r, field=species, fun=function(x,
...){length(unique(na.omit(x))) })
# as you do not have NA values you can also do this
x2 <- rasterize(xy, r, species, fun=function(x, ...){length(unique(x)) } )
Best, Robert
On Wed, Sep 21, 2011 at 10:13 AM, Tara Bridwell <tarabridwell at gmail.com>
wrote:
I am trying to determine the unique values within a raster, but am
having trouble. ?Here is some sample base data:
require(raster)
r <- raster(ncol=10, nrow=10)
r[]=1:ncell(r)
x <- c(-45, -45, -45, 30, 30, 20, -10, 50, -7)
y <- c(-25, -25, -25, 148, -148, 46, 23, 0, -69)
value <- c(1, 2, 3, 1, 2, 3, 1, 1, 1)
coord.plus.value <- cbind(x, y)
coord.plus.value_sp <- SpatialPoints(coord.plus.value)
From here I want to find the number of unique values in each cell of
the raster (i.e. 'richness'). ?To get around the need for an
na.rm=TRUE need for these functions, the documentation for rasterize
suggests:
Note that the function must take an na.rm argument, either explicitly
or through 'dots'. This means that fun=lenght fails, but
fun=function(x,...)lenght(x) works (but ignores the na.rm argument. To
use the na.rm argument you can use a function like this
fun=function(x,na.rm){if (na.rm) length(na.omit(x)) else (length(x)},
or use a function that removes NA values in all cases, like this
function to compute the number of unique values "richness":
fun=function(x, ...){length(unique(na.omit(x)))}.
When I try this for my code:
raster_ct<- rasterize(coord.plus.value_sp, r, fun=function(value)
{length(unique(na.omit(value)))})
I still get the following error:
Error in FUN(X[[1L]], ...) : unused argument(s) (na.rm = TRUE)
Does anyone have any thoughts on why this is happening? ?I have tried
defining the function outside of the rasterize code but then I end up
with the same value in all cells.
Thank you,
Tara Bridwell