On Wed, Nov 6, 2019 at 6:18 AM Bede-Fazekas ?kos <bfalevlist at gmail.com>
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.