2017-03-24 2 views
-1

나는 freq()를 사용하여 R에서 래스터의 픽셀 값의 빈도/카운트를 계산하려고합니다. 비교 두 예 래스터 생성 :큰 래스터 주파수 테이블/카운트

library(raster) 
RastSmall <- raster(nrow=70, ncol=70) 
RastBig <- raster(nrow=7000, ncol=7000) 
set.seed(0) 
RastSmall[] <- round(runif(1:ncell(r_hr), 1, 5)) 
RastBig[] <- round(runif(1:ncell(r_hr), 1, 5)) 

화소 카운트 사용 주파수()를

freq(RastSmall) 
value count 
[1,]  1 6540000 
[2,]  2 12150000 
[3,]  3 12140000 
[4,]  4 11720000 
[5,]  5 6450000 

얻기 그러나, 상당히 큰 파일이고 시간까지, 즉 매우 긴 걸린다. R에서 더 빠른 방법이 있습니까? 여기에 작고 큰 래스터의 속도 차이 :

system.time(freq(RastSmall)) 
    user system elapsed 
    0.008 0.000 0.004 
system.time(freq(RastBig)) 
    user system elapsed 
    40.484 0.964 41.445 

이 속도를 높일 수있는 방법이 있나요? 또는 명령 줄에서 gdal 도구와 같은 것을 사용하여이 작업을 수행 할 수 있습니까?

+0

[ask]를 읽고 필요한 [mcve]를 게시하십시오. –

+0

예제를 추가했습니다. – mace

+0

귀하의 질문에 입력 대 출력 대 코드가 무엇인지 말할 수 없으며 귀하의 알고리즘이 transofrmation을 수행해야한다고 말하는 것을 볼 수 없지만 'awk' 태그를 삭제하고 'R' 대답은 아마도'R' 전문가에게 완전히 이해 될 것입니다. 행운을 빕니다! –

답변

0

정확하게 지난주에했는데 R에서 다른 빠른 방법을 찾지 못했습니다. rqgis 패키지로 GRASS의 r.report을 호출하여 시도했습니다. 그것은 작동하지만 R 원시 기능보다 느립니다. 어쩌면 당신은 더 나은 운을 가질 것입니다. 시도해보고 싶은 경우를 대비해 다음 코드를 참조하십시오.

library(RQGIS) 
monqgis <- set_env("C:\\Mrnmicro\\Applic\\OSGeo4W") 
find_algorithms(search_term = "report", qgis_env = monqgis) 
get_usage(alg = "grass7:r.report", qgis_env = monqgis) 
params <- get_args_man(alg = "grass7:r.report", qgis_env = monqgis) 

get_usage(alg = "grass7:r.report", qgis_env = monqgis) 

params$map <- classif 
params$units <- 5 
params$rawoutput <- "C:\\temp\\outputRQGIS_raw" 
params$html <- "C:\\temp\\outputRQGIS" 

system.time(asas <- run_qgis(alg = "grass7:r.report", params=params,load_output = params$OUTPUT, qgis_env = monqgis))