On Wed, Nov 6, 2019 at 6:18 AM Bede-Fazekas Ákos <

[hidden email]>

wrote:

> Dear Cristabel,

> function focal() of package raster is what you are searching for.

>

No it isn't. That operates over the whole raster, which is massive overkill

for querying the eight pixels around a single point.

>

> > var <- nc[lon.coor, lat.coor, ]

> >

> > In var are the values for my point. But I also need the values of the

> > 8 surrounding pixels to get an average.

>

>

The 8 pixels around X[i,j] are:

X[i-1,j-1], X[i, j-1], X[i+1,j-1]

X[i-1,j], X[i+1,j]

X[i-1,j+1], X[i,j+1], X[i+1,j+1]

as long as those cells aren't now outside the matrix.

So write a function that generates those offsets given i,j:

> n8 =

function(i,j){cbind(i+c(-1,0,1,-1,1,-1,0,1),j+c(-1,-1,-1,0,0,1,1,1))}

which returns this:

> n8(23,12)

[,1] [,2]

[1,] 22 11

[2,] 23 11

[3,] 24 11

[4,] 22 12

[5,] 24 12

[6,] 22 13

[7,] 23 13

[8,] 24 13

Then for a test matrix:

> m = matrix(1:10000,100,100)

where i,j = 23, 12:

> m[23,12]

[1] 1123

the 8 neighbours are:

> m[n8(23,12)]

[1] 1022 1023 1024 1122 1124 1222 1223 1224

>

Now I'm not sure if you can do exactly that with your netcdf object because

netcdf is a structured flexible format, and you've shown `nc[lon, lat, ]`

where `nc` is your netcdf object rather than a variable got from it and I

can't get that to work for my test NCDF. (I have sea surface temp in an

netcdf which I get with `sst = nc_getvar(nc, "sst")` for example). But the

mechanism is the same - compute the index of the 8 neighbour pixels and

extract.

[[alternative HTML version deleted]]

_______________________________________________

R-sig-Geo mailing list

[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo