Outdated version of the documentation. Find the latest one here.

처리 과정에서 R 스크립트 사용

Module contributed by Matteo Ghetta - Dropcode

QGIS 내부의 처리 과정에서 R 스크립트를 입력하고 실행할 수 있습니다.

경고

R has to be installed on your computer and the PATH has to correctly set up. Moreover Processing just calls the external R packages, it is not able to install them. So be sure to install external packages directly in R. See the related chapter in the training manual.

주석

패키지 관련 문제가 발생할 경우, sp, rgdalraster 같은 처리 과정이 필수적으로 갖춰야 하는 패키지들이 없기 때문일 수도 있습니다.

스크립트 추가

스크립트를 추가하는 일은 매우 간단합니다. 처리 과정 툴박스를 열고 R ‣ Tools ‣ Create new R script 메뉴를 클릭하기만 하면 됩니다.

../../../_images/r_intro_1.png

주석

처리 과정에 R이 안 보일 경우, Processing ‣ Options ‣ Providers 메뉴에서 활성화시켜야 합니다.

스크립트 편집 창 이 열리는데, 여기에 스크립트 자체를 추가하기 전에 몇몇 파라미터들을 설정해줘야 합니다.

../../../_images/r_intro_2.png

그래프 생성

이번 예제에서 벡터 레이어 항목의 **상자 모양 그래프**를 생성할 것입니다.

QGIS 프로젝트 r_intro.qps 를 여십시오.

스크립트 파라미터

편집기를 실행해서 첫 부분부터 입력을 시작하십시오.

스크립트 자체를 입력하기 전에 몇몇 파라미터들을 설정 해야 합니다.

  1. 여러분이 스크립트를 입력해야 할 그룹의 명칭은 다음과 같습니다.

    ##plots=group
    

따라서 처리 과정 툴박스의 plots 그룹에서 여러분의 스크립트를 찾을 수 있습니다.

  1. 처리 과정에게 여러분이 그래프를 표출하고 싶다고 (다음 예시와 같이) 해줘야 합니다.

    ##showplots
    

이렇게 하면 처리 과정의 Result Viewer 에서 그래프를 볼 수 있습니다.

  1. 또 여러분이 작업하고 있는 데이터가 어떤 유형인지도 처리 과정에게 알려줘야 합니다. 이번 예제에서는 벡터 레이어의 항목으로부터 그래프를 생성하려 하기 때문에,

    ##Layer=vector
    

처리 과정이 입력물이 벡터라는 사실을 알고 있습니다. Layer 라는 이름은 중요하지 않습니다. 중요한 것은 바로 벡터 파라미터입니다.

  1. 마지막으로, 여러분이 그래프를 그리려 하는 벡터 레이어의 입력 항목을 설정해야 합니다.

    ##X=Field Layer
    

따라서 처리 과정은 여러분이 XField Layer 라고 명명한 사실을 알게 되었습니다.

스크립트 자체

이제 스크립트의 *표제(heading)*를 설정했으니, 함수를 추가할 수 있습니다.

boxplot(Layer[[X]])

데이터셋으로 Layer 를, 데이터셋 항목으로 X 를 호출하는 R 함수 자체의 명칭이 boxplot 이라는 사실을 기억하십시오.

경고

파라미터 X 는 쌍대괄호 [[]] 안에 있습니다.

최종 스크립트는 다음과 같이 보일 겁니다.

##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
../../../_images/r_intro_3.png

처리 과정이 제안하는 기본 경로에 스크립트를 저장하십시오. 여러분이 명명한 명칭이 처리 과정 툴박스에 표출되는 스크립트의 명칭이 될 것입니다.

주석

다른 경로에 스크립트를 저장할 수도 있지만, 처리 과정이 자동적으로 불러올 수 없기 때문에 사용자가 수동으로 모든 스크립트를 업로드해야 합니다.

이제 편집 창 최상단에 있는 버튼을 클릭해서 스크립트를 실행해보십시오.

../../../_images/r_intro_4.png

다른 방법으로는 편집 창을 종료한 다음 처리 과정의 텍스트 상자를 통해 여러분의 스크립트를 찾을 수도 있습니다.

../../../_images/r_intro_5.png

이제 처리 과정 알고리듬 창에서 필요한 파라미터를 입력할 수 있습니다.

  • Layersample points 를 선택하십시오.

  • X 항목을 value 파라미터로 채우십시오.

Run 버튼을 클릭하십시오.

../../../_images/r_intro_6.png

Result window 가 자동적으로 열릴 텐데, 열리지 않을 경우 Processing ‣ Result Viewer... 메뉴를 클릭하면 됩니다.

여러분이 보게 될 최종 산출물은 다음과 같습니다.

../../../_images/r_intro_7.png

주석

그래프를 오른쪽 클릭하면 이미지를 열 수도, 복사할 수도, 저장할 수도 있습니다.

벡터 생성

R 스크립트를 통해 QGIS에서 벡터를 생성해서 자동적으로 불러올 수도 있습니다.

다음 예제는 R ‣ Tools ‣ Download R scripts from the on-line collection 메뉴를 통해 온라인 아카이브에서 다운로드할 수 있는 Random sampling grid 스크립트로 만든 것입니다.

The aim of this exercise is to crate a random point vector in a layer extent using the spsample function of the sp package.

스크립트 파라미터

이전과 마찬가지로 스크립트 자체를 입력하기 전에 몇몇 파라미터들을 설정해줘야 합니다.

  1. specify the the name of the group in which you want to put your script, for example Point pattern analysis:

    ##Point pattern analysis=group
    
  2. 무작위 포인트를 담게 될 레이어를 설정하십시오.

    ##Layer=vector
    
  3. 생성될 포인트의 개수를 설정하십시오.

    ##Size=number 10
    

주석

기본값은 10개입니다. 이 숫자를 변경하거나, 기본 숫자 없이 파라미터를 내버려둘 수도 있습니다.

  1. 산출물을 벡터 레이어로 설정하십시오.

    ##Output= output vector
    

스크립트 자체

이제 함수 자체를 추가할 수 있습니다.

  1. spsample 함수를 실행하십시오.

    pts=spsample(Layer,Size,type="random")
    

this way the function takes the extent of the Layer, the number of points is taken from the Size parameter and the type po point generation is random

  1. 산출물의 파라미터들을 담고 있는 명령어 라인을 입력하십시오.

    Output=SpatialPointsDataFrame(pts, as.data.frame(pts))

최종 스크립트는 다음처럼 보일 것입니다.

../../../_images/r_intro_8.png

스크립트를 저장한 다음 Run 버튼을 클릭해서 실행하십시오.

새 창에서 정확한 파라미터들을 입력하십시오.

../../../_images/r_intro_9.png

Run 버튼을 클릭합니다.

맵 캔버스에 산출된 포인트들이 표출됩니다.

../../../_images/r_intro_10.png

R - 처리 과정 문법

처리 과정이 R로부터 결과를 얻기 위해 몇몇 특수한 문법을 사용한다는 사실을 유념하십시오.

  • 명령어 앞에 >lillie.test(Layer[[Field]]) 처럼 > 를 삽입하는 것은 결과를 R 산출물(Result viewer)로 보내야 한다는 의미입니다.

  • 그래프 뒤에 + 를 써서 다른 그래프를 겹치게 할 수 있습니다. 예를 들면 plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]])) 처럼 함수를 입력할 수 있습니다.