2017-07-12 2 views
3

J'essaie de confirmer s'il y a un bug ou au moins un changement de comportement inexpliqué dans la fonction approxNA dans la version la plus récente (2.5-8) du R Raster paquet. Note ultérieure: la réponse correcte est considérée comme un commentaire dans la chaîne de réponse ci-dessous qui conseille une mise à jour de paquet qui a été libéréeApproxNA produisant des résultats différents et incorrects dans des piles de grands rasters

J'ai un petit exemple reproductible ci-dessous. Les symptômes initiaux étaient que la plupart des sorties de la commande approxNA sur une brique eMODIS quotidienne d'une année semblaient être les mêmes que l'entrée - il y avait beaucoup et beaucoup de valeurs NA qui n'avaient pas été interpolées ... mais quand je suis revenu à une ancienne version du paquet (2.3-12) et une ancienne version de R (3.3.1, Bug-in-your-hair) renvoie les résultats interpolés corrects. Je l'ai essayé avec un type de données raster défini sur INT2S et sans jeu de types de données raster particulier.

J'ai vérifié la documentation au cas où il y aurait des raisons de penser que les résultats diffèrent, mais il n'y a aucun changement dans la documentation entre l'ancienne version du paquet fonctionnant correctement et la nouvelle version du paquet qui ne fonctionne pas correctement.

Dans mon exemple reproductible, il y a moins d'erreurs mais elles sont évidentes à voir uniquement à partir de la vue de tracé (incluse dans l'exemple). Dans ces parcelles, vous pouvez voir que les parties nord de plusieurs couches ont des valeurs NA qui auraient dû être interpolées. Je cours 64 bits Windows 7 et 64 bits R 3.3.2 avec raster 2.5-8 avec une interface R-Studio, mais j'ai testé aussi sur R-console avec les mêmes résultats et sur un ordinateur différent qui a la même configuration, et également testé en R 32 bits avec les mêmes résultats. Un déclencheur semble être la présence de valeurs NA dans la première ou la dernière couche, mais les erreurs se produisent dans les cellules qui n'ont pas de valeurs NA dans la première ou la dernière couche: par exemple, les cellules en haut à gauche ne sont manquantes que dans couche 2 dans la pile d'origine, donc ce devrait être une interpolation très simple pour ces cellules de la couche 1 à la couche 3.

J'ai suivi les instructions de R pour soumettre un rapport de bug il y a quelques mois mais je ne suis pas sûr si ces informations de contact sont correctes, ou si elles ont pu être entrées dans un dossier spam. Je serais également heureux avec des réponses suggérant une direction vers une solution de contournement, tant que ce n'est pas trop lent et utilise des paquets communs ou des paquets qui sont régulièrement maintenus.

Je ne peux pas l'air de façon de les étiqueter correctement mais au-dessous sont

terrain de la brique d'entrée exemple

terrain de la bonne brique de sortie

terrain de la mauvaise brique de sortie

Merci pour vos suggestions.

##### start Reproducible example 

library(raster) 
# make a large raster, it must be quite big to have a problem 
r <- raster(ncols=8142, nrows=3285) 
# make six rasters to stack, use different ranges to better see the interpolation results 
r1 <- setValues(r, round(10 * runif(ncell(r)),0)) 
r2 <- setValues(r, NA) 
r3 <- setValues(r, round(100 * runif(ncell(r)),0)) 
r4 <- setValues(r, round(1000 * runif(ncell(r)),0)) 
r5 <- setValues(r, round(50 * runif(ncell(r)),0)) 
r6 <- setValues(r, round(100 * runif(ncell(r)),0)) 

# insert some NA values 
r1[100:600,] <- NA 
r3[,1500:1950] <- NA 
r5[,400:800] <- NA 
r6[2500:2900,] <- NA 

# insert some constant values to make it easier to see if interpolation is working 
r4[300:500,] <- 750 
r6[300:400,] <- 20 
r6[400:500,] <- 100 
# make a stack 
s <- stack(r1,r2,r3,r4,r5,r6) 

# see what the pre-interpolation stack looks like 
#plot(s) 
plot(s, col = colorRampPalette(c("royalblue","springgreen","yellow","red"))(255)) 

# interpolate, this takes a while 
x2 <- approxNA(s, method = "linear", rule=2) 

# see what the post interpolation looks like, there should be filled in values for all 
# parts of all layers but instead it’s retaining many of the NA values 
#plot(x2) 
plot(x2, col = colorRampPalette(c("royalblue","springgreen","yellow","red"))(255)) 


## End reproducible example 

Plot of the input to the approxNa command Plot of the good output to the old approxNa command - sorry for the small labels. Plot of the bad output to the new approxNa command

Répondre

1

Je ne peux pas reproduire le problème.J'ai un peu simplifié l'exemple

library(raster) 
r <- raster(ncols=81, nrows=32) 
r1 <- setValues(r, 1) 
r2 <- setValues(r, NA) 
r3 <- setValues(r, 3) 
r4 <- setValues(r, 4) 
r5 <- setValues(r, 5) 
r6 <- setValues(r, 6) 

# insert some NA values 
r1[1:6,] <- NA 
r3[,15:19] <- NA 
r5[,4:8] <- NA 
r6[25:29,] <- NA 

# make a stack 
s <- stack(r1,r2,r3,r4,r5,r6) 

# see what the pre-interpolation stack looks like 
spplot(s) 

# in memory 
x1 <- approxNA(s, method = "linear", rule=2) 
spplot(x1) 

# to disk (that is, simulate a large raster 
rasterOptions(todisk=TRUE) 
x2 <- approxNA(s, method = "linear", rule=2) 
rasterOptions(todisk=FALSE) 
spplot(x2) 

Je ne vois pas de différence. x1 et x2 semblent identiques

x2 - x1 
#class  : RasterBrick 
#dimensions : 32, 81, 2592, 6 (nrow, ncol, ncell, nlayers) 
#resolution : 4.444444, 5.625 (x, y) 
#extent  : -180, 180, -90, 90 (xmin, xmax, ymin, ymax) 
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#data source : in memory01_223851_3440_81523.grd 
#names  : layer.1, layer.2, layer.3, layer.4, layer.5, layer.6 
#min values :  0,  0,  0,  0,  0,  0 
#max values :  0,  0,  0,  0,  0,  0 
+0

Merci pour votre recherche. Dans la mesure où je peux dire que le problème se produit uniquement avec les rasters de grandes dimensions, sinon j'aurais donné un exemple plus petit :-) parce que je sais que c'est un ours à courir. L'option toDisk imite-t-elle correctement les grands rasters dans ce cas? Pour moi, ça ne semble pas être. Si le problème ne se produit pas avec l'exemple que j'ai donné, j'aimerais connaître la configuration de votre ordinateur, car je peux peut-être améliorer mon ordinateur et contourner ce problème. J'ai un ordinateur assez puissant qui a été conçu pour fonctionner avec ces grands ensembles de données, mais cela pourrait être mieux. – jNorris

+1

Oui, l'option toDisk fait fonctionner la fonction comme pour les rasters volumineux. Mais votre grand exemple de données fonctionne également pour moi. Je réalise maintenant (en regardant le ChangeLog) que ce que vous voyez est un bug qui a été corrigé mais pas encore publié. J'utilise la version de développement. J'ai soumis une nouvelle version (2.6-2) à CRAN; J'espère qu'il sera disponible dans quelques jours – RobertH

+0

C'est merveilleux, je suis juste souriant maintenant et sera toute la journée - la bibliothèque raster est si précieuse pour moi. Merci merci merci. hmmmm J'essaie de comprendre comment marquer votre commentaire sur la mise à jour de la nouvelle bibliothèque comme réponse. – jNorris