[R-sig-Geo] Passing a custom function to raster::focal
Ben Tupper
btupper at bigelow.org
Tue Jan 10 16:16:56 CET 2017
Hi,
Your calc_pctg() function is trying to treat the input as a raster (well, a mini-raster). I think that you actually get a numeric. So, if you drop the call to values(x) in the sum you should be fine.
# Function to calculate percentage of cells with value of 1
calc_pctg <- function(x)
{
pct_val <- sum(x == 1, na.rm = TRUE)/length(x)
return(pct_val)
}
Ben
> On Jan 10, 2017, at 9:59 AM, Mirza Cengic <mirzaceng at gmail.com> wrote:
>
> Hi all,
>
> I want to run the focal() function from the raster package with a custom
> function. I want to calculate within a moving kernel (in the example I
> provided 5x5), what is the percentage of cells with the value 1 (frequency
> would work as well), and assign the value of the center cell of the moving
> window. The error occurs when I run the focal function. I suppose the error
> might come from using an inappropriate method on the object, but I am not
> really sure how to solve it. Could you please give me some hints what am I
> doing wrong.
>
>
> Regards,
> Mirza.
>
> Example:
>
> library(raster)
>>
>> my_rast <- raster(ncols=40, nrows=20, xmn=0)
>> my_rast[] <- rnorm(ncell(my_rast))
>>
>> # Reclassify to binary raster
>> my_mat <- c(cellStats(my_rast, min),cellStats(my_rast, max)/2,
>> cellStats(my_rast, max)/2, cellStats(my_rast, max), 0,1)
>> my_rcl_mat <- matrix(my_mat, ncol=3, byrow=FALSE)
>> my_rast_rcl <- reclassify(my_rast, my_rcl_mat)
>>
>> # Function to calculate percentage of cells with value of 1
>> calc_pctg <- function(x)
>> {
>> pct_val <- sum(values(x) == 1, na.rm = TRUE)/length(x)
>> return(pct_val)
>> }
>>
>> # Run focal
>> my_rast_fcl <- focal(my_rast_rcl,
>> w = matrix(1/25,nrow=5,ncol=5),
>> calc_pctg)
>
>
>
>
>
>>
>
> --
>>
> *Mirza Čengić*
>
> *Junior Researcher | Department of Environmental Science*
> Radboud University | Heyendaalseweg 135
> 6525 AJ Nijmegen | The Netherlands
>
> +31 657020823 | +38761908392
> Skype: mirzacengic
> <https://www.linkedin.com/in/mirzacengic>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org
More information about the R-sig-Geo
mailing list