2016-04-28 8 views
0

Ich versuche globale Stats (SD) im Stapel von 40 Raster Brick zu berechnen, ohne 0 bis NA zu ersetzen. Gibt es dafür einen schnelleren Weg als unten? Ich kann eine Schleife so erstellen, dass die globalSD für jeden Baustein separat berechnet wird. Aber es löst immer noch nicht das Problem, 0 in meiner Berechnung zu ignorieren.Berechnen von globalen Statistiken in Raster-Bricks in R ignorieren Pixel Wert 0

rc <- function(x) { ifelse(x >0, cellStats(fSDstack, stat="sd"), ifelse(x <= 0,x,NA)) } 

test <- calc(fSDstack,fun=rc) 

Dank TiB

+0

Was ist der Zweck der zweiten 'ifelse'? Und sind Sie sicher, dass Sie Nullen in Ihrer SD-Berechnung ignorieren wollen? Wenn Sie Nullen behandeln, die ungültig sind, können Sie sie vorher durch "NA" ersetzen. h. "fSDstack [fSDstack == 0] <- NA; calc (fSDstack, sd) '. Siehe auch http://StackOverflow.com/a/33714515/489704 für die Geschwindigkeit. – jbaums

Antwort

1

Wie wäre das?

library(raster) 
b <- brick(system.file("external/rlogo.grd", package="raster")) 

# here using 255 instead of 0, as that goes better with the example data 
rc <- function(x) { sd(x[x != 255], na.rm=TRUE) } 
test <- calc(b,fun=rc)