17.33. プロセシングでRスクリプトを使用する

このモジュールは、Matteo Ghettaが提供し、Scuola Superiore Sant'Anna が資金を提供しました

Processing R Provider による)プロセシングは、QGISの内部でRスクリプトを書いて実行することを可能にします。

警告

コンピュータにRがインストールされ、PATHが正しく設定されている必要があります。さらにプロセシングは外部のRパッケージを呼び出すだけで、それをインストールすることはできません。ですから外部パッケージは必ずRで直接インストールするようにしてください。ユーザーマニュアルの関連する を参照してください。

注釈

パッケージ の問題がある場合、それは sp, rgdal, raster などのプロセシングで必要な 必須 パッケージが欠けていることに関連しているかもしれません。

17.33.1. スクリプトを追加する

スクリプトを追加するのは簡単です。最も簡単な方法は、プロセシングツールボックスを開き、プロセシングツールボックスの上部にあるRメニュー(Rのアイコンがついている)から Create new R script... を選択することです。また、例えばテキストエディタでスクリプトを作成し、Rスクリプトフォルダ(processing/rscripts)に保存することもできます。そこに保存されると、プロセシングツールボックスのスクリプト名を右クリックして Edit Script...) を選択することで編集できるようになります。

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

注釈

プロセシングの中にRが見あたらない場合は、 プロセシング ► オプション ► プロバイダ を有効にする必要があります

スクリプト本体を追加できる前にいくつかのパラメーターを指定する必要がある スクリプトエディタウィンドウ を開きます。

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

17.33.2. プロットを作成する

このチュートリアルでは、ベクタレイヤフィールドの 箱ひげ図 を作成しようとしています。

exercise_data/processing/r_intro/ フォルダの下にある r_intro.qgs QGISプロジェクトを開きます。

スクリプトのパラメーター

エディタを開いて、それの最初に書き始めます。

スクリプト本体の にいくつかのパラメーターを指定する 必要があります :

  1. スクリプトを置くグループの名前(この場合は plots)(グループが存在しない場合は作成されます):

    ##plots=group
    

    スクリプトはプロセシングツールボックスの plots Rグループ内にあります。

  2. プロットを(この例に)表示したいことをプロセシングに伝える必要があります:

    ##showplots
    

    すると、結果ビューア パネルにプロットへのリンクが表示されます( ビュー ► パネルプロセシング ► 結果ビューア でオン/オフを切り替えることができます)。

  3. また、入力データについてプロセシングに伝える必要があります。この例では、ベクタレイヤのフィールドからプロットを作成したいと思います:

    ##Layer=vector
    

    プロセシングは入力がベクトルであることが判りました。Layer という名前は重要ではなく、重要なのは vector というパラメータです。

  4. 最後に、(上記で指定した名前 レイヤ を使って)ベクタレイヤの入力フィールドを指定します:

    ##X=Field Layer
    

    これでプロセシングは、Layer というフィールドが必要で、それを X と呼ぶことを知りました。

  5. また、name を使ってスクリプトの名前を定義することも可能です:

    ##My box plot script=name
    

    定義されていない場合、ファイル名がスクリプトの名前として使用されます。

スクリプト本体

今、機能を追加できるスクリプトの 見出し を設定し終わりました:

boxplot(Layer[[X]])

boxplot はR関数の名前で、パラメータ Layer は入力データセットに定義した名前、X はそのデータセットのフィールドに定義した名前です。

警告

パラメータ X は二重の角括弧([[]])の中に入れる必要があります。

最後のスクリプトは次のようになります:

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

プロセシングが提案するデフォルトのパス(processing/rscripts)にスクリプトを保存します。スクリプトの見出しに name を定義していない場合、選択したファイル名がプロセシングツールボックスのスクリプトの名前となります。

注釈

スクリプトは好きな場所に保存できますが、その場合プロセシングでは自動的にプロセシングツールボックスに含めることができないので、手動でアップロードする必要があります。

今、エディタ・ウィンドウの上部にあるボタンを使用して、それを実行します。

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

エディタウィンドウを閉じたら、プロセシングのテキストボックスを使って、スクリプトを探します:

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

これで、プロセシングアルゴリズムウィンドウに必要なパラメータを入力することができます:

  • ** Layer** に sample_points を選びます

  • X フィールドに value を選びます

[実行] をクリックしてください。

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

結果ウィンドウ が自動的に開くはずですが、そうでない場合は プロセシング ► 結果ビューア... をクリックするだけです。

ビューアにあるリンクをクリックすると次が表示されます:

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

注釈

プロットで右クリックすることでその画像を開いたりコピーしたり保存することができます。

17.33.3. ベクタを作成する

また、ベクタレイヤを作成し、QGISに自動的に読み込ませることもできます。

以下の例は、Rスクリプトのオンラインコレクションにある Random sampling grid スクリプトから引用したものです(このオンラインコレクションのスクリプトは https://github.com/qgis/QGIS-Processing/tree/master/rscripts で見ることができます)。

この演習の目的は、sp パッケージの spsample 関数を使用して、範囲を制限する入力ベクタレイヤを使ってランダムポイントベクタレイヤを作成することです。

スクリプトのパラメーター

前と同じように、スクリプト本体の前にいくつかのパラメーターを設定する必要があります。

  1. スクリプトを入れるグループ名(ここでは ポイントパターン解析)を指定します:

    ##Point pattern analysis=group
    
  2. ランダムポイントの配置を制約する入力パラメータ(ベクタレイヤ)を定義します:

    ##Layer=vector
    
  3. 作成するポイントの数を入力パラメータで設定します(Size、デフォルト値は``10``):

    ##Size=number 10
    

    注釈

    デフォルト値(10)が定義されているため、ユーザーはこの数値を変更するか数値のないパラメータのままにすることもできます。

  4. Output と呼ばれる)出力ベクタレイヤがあることを指定します:

    ##Output=output vector
    

スクリプト本体

今、関数の本体を追加できます。

  1. spsample 関数を使います:

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

    この関数は、Layer を使用して、点の配置を制約します(線レイヤの場合、点はレイヤ内のいずれかの線上にある必要があり、ポリゴンレイヤの場合、点はポリゴン内にある必要があります)。点の数は Size パラメータで指定します。サンプリング方法は、random です。

  2. 出力(``Output``パラメータ)を生成します:

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

最後のスクリプトは次のようになります:

##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
../../../_images/r_intro_8.png

保存し、実行ボタンをクリックして実行します。

新しいウィンドウで正しいパラメーターを入力し:

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

そして実行をクリックしてください。

結果レイヤが目次に追加され、そのポイントがマップキャンバスに表示されます:

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

17.33.4. Rからのテキスト・グラフ出力 - 文法

``Processing R Provider plugin``を使った)プロセシング は、Rから結果を取り出すために特別な文法を使用します:

  • コマンドの前に > は、 >lillie.test(Layer[[Field]]) 中でのように、結果がR出力(結果ビューア)に送られるべきことを意味します

  • プロットの後に + を付けると、オーバーレイプロットを有効にします。例えば、 plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]])) です。