2014-07-22 1 views
0

나는 r의 모든 픽셀의 값이 40r1에서 (로 대체) 값을 해당 넣어 같으면 내가 r1두 개의 래스터 (매트릭스) 사이에서 값을 바꾸는 방법은 무엇입니까?

library (raster) 
r <- raster(nrows=10, ncols=10) 
r <- setValues(r, 1:ncell(r)) 

r1 <- raster(nrows=10, ncols=10) 
r1 <- setValues(r1, 1:ncell(r)) 

에서 r의 일부 valus을 대체하고자하는 두 개의 래스터 rr2 있습니다. 그래서 결국 내가 r1

에서 해당 값으로 대체 40의 값으로 r을 얻을 것이다 잘 여기에 두 개의 래스터는 동일하지만 내 데이터가 어떤 도움

+0

'r @ data @ values'의 값을 바꾸시겠습니까? –

답변

1

에 대한 감사하지 않습니다 여기에 방법이 있습니다. 먼저 r의 값이 255과 같은지 확인합니다. 둘째,이 값을 r1의 해당 값으로 바꿉니다.

idx <- values(r) == 255 
values(r)[idx] <- values(r1)[idx] 
+1

@hyat 상당히 빠른 방법은 없다고 생각합니다. –

1

대체로 두 가지 방법으로 대체 할 수 있습니다. 여기에 내가 두 프로필 :

> library(raster) 
> rm(list=ls()) 
> r = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> r1 = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> 
> ptm <- proc.time() 
> idx <- values(r) <=0 
> values(r)[idx] <- values(r1)[idx] 
> proc.time() - ptm 
    user system elapsed 
    2.76 0.73 7.19 
> 
> r = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> r1 = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> 
> ptm <- proc.time() 
> index = r<=0 
> r[index]=r1[index] 
> proc.time() - ptm 
    user system elapsed 
    5.44 0.89 9.20 

당신이 rasterstack 이하 래스터 많은 수의에이 작업을 실행하는 경우 난 당신의 코드를 병렬화의 foreach %의 dopar %의 학습 추천 할 것입니다. 여기 네트 : https://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf

당신이 큰 래스터 처리에 네트를 읽어야합니다 (메모리 한계로 실행) 하나 또는 두 개의 매우 큰 래스터에 그것을 실행하는 경우 : R 데이터 유형에 대한 자세한 설명은 https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf

을 (그리고 왜 어떤 것들이 왜 느린 지에 대한 설명은 Hadley Wickam의 사이트 http://adv-r.had.co.nz/을 참조하십시오 : http://adv-r.had.co.nz/Performance.html#implementation-performance

관련 문제