Ich versuche, die Lücken in einer Zeitreihe von ndvi Bildern mit Spline zu füllen.Interpolierende Rasterstack-Zeitreihe mit Spline in R
Ich habe einen Raster-Stack mit den ndvi-Bildern erstellt, die ich habe und einige Schichten mit nur NA
für die Zeitschritte, die ich nicht habe. Die Rasterstapel ist als GeoTiff hier: raster stack download
ich die folgende Funktion geschrieben haben, die fehlenden Werte zu interpolieren:
f.int.spline <- function(x) { # x is a raster stack or brick
v=as.vector(x) # transform x in a vector for easier manipulation
z=which(v %in% NA) # find which pixel values are to be interpolated
# interpolation with spline
interp <- spline(x=c(1:NROW(v)), y = v,
xout = z, # missing values to be interpolated
method = "natural")
x[z] <-interp$y # including the missing values in the original vector
}
Die Funktion funktioniert, wenn ich es mit einem Pixel (zB x[ 50, 200 ]
), aber wenn ich es mit calc(x, f.int.spline)
laufen gibt es einen allgemeinen Fehler:
> error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
wenn ich es laufen mit f.int.spline(x)
es einen Fehler zu Speicherauslastung bezogen zurückgibt:
> Error in as.vector(t((matrix(rep(i, rec2), nrow = rec2, byrow = TRUE)) + :
error in evaluating the argument 'x' in selecting a method for function 'as.vector': Error in t((matrix(rep(i, rec2), nrow = rec2, byrow = TRUE)) + add) :
error in evaluating the argument 'x' in selecting a method for function 't': Error: cannot allocate vector of size 4.9 Gb
1) Sehen Sie Fehler oder haben Sie Workarounds, um das Problem zu beheben?
2) Ich kann nicht genau verstehen, wie die calc()
Funktion für Rasterstapel funktioniert: Nimmt es die Werte jedes Pixels in allen Schichten?
3) Wie von Jeffrey Evans vorgeschlagen Ich suche auch nach anderen Interpolationsfunktionen, die besser für den Job geeignet sind. Irgendeine Idee ?
A Lowess flexibler sein kann bedienen und einfacher zu implementieren. –