2017-09-24 5 views
0

J'ai une matrice raster avec des valeurs non négatives (chaque pixel a une valeur de hauteur), et je voudrais calculer des mesures de hauteur personnalisées avec une fenêtre mobile 5x5, en utilisant symétrique rembourrage autour des bords de la matrice. J'ai fait quelques calculs de base en utilisant pktools (filtre spatial) dans QGIS (moyenne, écart-type, maximum), ce qui m'a permis de le faire (remplissage en utilisant des zéros, des réplicats ou symétrique). Maintenant que je veux calculer d'autres métriques en utilisant des fonctions personnalisées (c.-à-d. Coefficient de hauteurs, asymétrie et aplatissement), je ne peux pas utiliser pktools. J'ai essayé d'utiliser la fonction focal() dans raster, mais le padValue doit être numérique. Y a-t-il un moyen de contourner cela, alors je peux avoir des bordures symétriques? J'ai essayé les éléments suivants:Comment incorporer un padValue symétrique avec fonction focale dans le raster

> f.CoH <- function(x) {sd(x)/mean(x)} 
> 
> CoH <- focal(raster, w=matrix(1,nrow=5,ncol=5), fun=f.CoH, pad=TRUE, 
> padValue="symmetric") 

Mais l'erreur suivante:

> Warning message: In .local(x, ...) : NAs introduced by coercion 

Merci

Répondre

1

Vous pouvez essayer padValue = NA.

Vous devrez également nous modifier la fonction pour traiter NAs:

f.CoH <- function(x) {sd(x, na.rm = TRUE)/mean(x, na.rm = TRUE)} 

Tenez compte cependant que cela donnerait des résultats quelque peu différents WRT « padding symétrique », parce que l'écart-type et moyenne obtenue par padding avec Les AN et en reproduisant les valeurs seraient différents.

HTH

+0

Existe-t-il un moyen de répliquer les valeurs à la place? Je préférerais cela que NAs ou 0. – Danica

+1

Pas que je sache, sauf si vous voulez le programmer. Cependant, à mon avis, il vaut mieux se contenter de NA que de répliquer: au moins, les statistiques que vous dérivez sont basées sur des données réelles, tandis que la réplication de données introduit de fausses données et les traite comme si elles étaient réelles. – lbusett