2013-08-29 10 views
1

나는 100 개의 래스터 레이어의 행렬을 가지고 있으며 평균은 하나의 새로운 레이어를 만들고 싶습니다. 오버레이 기능을 단순히 사용할 수있는 두 개의 레이어가 있거나 그냥 c <- mean (a, b)을 사용했는지 알고 있습니다. 그러나 행렬을 어떻게 처리해야할지 모르겠습니다. 여기행렬의 래스터 오버레이

는 행렬의 샘플입니다 : 내가

a.avg <- mean (a.total[,]) 

을 시도

[[1]] 
class  : RasterLayer 
dimensions : 175, 179, 31325 (nrow, ncol, ncell) 
resolution : 1, 1 (x, y) 
extent  : 0, 179, 0, 175 (xmin, xmax, ymin, ymax) 
coord. ref. : NA 
data source : in memory 
names  : layer 
values  : 0, 100 (min, max) 

나는 아마 오류 argument is not numeric or logical: returning NA

+0

래스터 레이어의 매트릭스가 있습니까? 또는 목록? 아니면 더 나은 스택? –

+0

평균을 내기 전에 아래 제안 사항을 사용하여 스택을 만들었습니다. 고맙습니다. – user2729279

답변

0

나는 당신이 listrasterLayer의의가 있다고 가정을 수신 (또는 a stack). 이미 stack이있는 경우,

#1 - Get all rasters in the list into a stack 
mystack <- do.call(stack , mylistofrasters) 

#2 - Take mean of each pixel in the stack returning a single raster that is the average 
mean.stack <- calc(mystack , mean , na.rm = TRUE) 
0

이 답변은 간단한 코드를 사용하여 @의 SimonO101의 대답과 비슷합니다 ... 단계를 건너 뛸 수 있지만, 난 당신이 list하지 내가 mylistofrasters라는 가지고 matrix 있다고 가정합니다.

첫째, (이미 목록이있는 경우이 단계를 건너 뛸 수 있습니다)의이 RasterLayer의 목록을 만들어 보자 :

library(raster) 

r <- raster(nrow=10, ncol=10) 
r <- init(r, runif) 
lr <- lapply(1:8, function(i)r) 

raster 패키지 목록에 대한 stack 방법을 정의, 당신은하지 않고 직접 사용할 수 있도록 do.call :

s <- stack(lr) 

게다가, Raster* 객체의 mean 방법이있다. 따라서 실제로 필요하지 않습니다 calc :

mean(s, na.rm=TRUE)