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のアイコンがついている)から processing/rscripts
)に保存することもできます。そこに保存されると、プロセシングツールボックスのスクリプト名を右クリックして ) を選択することで編集できるようになります。
注釈
プロセシングの中にRが見あたらない場合は、
を有効にする必要がありますスクリプト本体を追加できる前にいくつかのパラメーターを指定する必要がある スクリプトエディタウィンドウ を開きます。
17.33.2. プロットを作成する
このチュートリアルでは、ベクタレイヤフィールドの 箱ひげ図 を作成しようとしています。
exercise_data/processing/r_intro/
フォルダの下にある r_intro.qgs
QGISプロジェクトを開きます。
スクリプトのパラメーター
エディタを開いて、それの最初に書き始めます。
スクリプト本体の 前 にいくつかのパラメーターを指定する 必要があります :
スクリプトを置くグループの名前(この場合は plots)(グループが存在しない場合は作成されます):
##plots=group
スクリプトはプロセシングツールボックスの plots Rグループ内にあります。
プロットを(この例に)表示したいことをプロセシングに伝える必要があります:
##showplots
すると、結果ビューア パネルにプロットへのリンクが表示されます(
と でオン/オフを切り替えることができます)。また、入力データについてプロセシングに伝える必要があります。この例では、ベクタレイヤのフィールドからプロットを作成したいと思います:
##Layer=vector
プロセシングは入力がベクトルであることが判りました。Layer という名前は重要ではなく、重要なのは vector というパラメータです。
最後に、(上記で指定した名前 レイヤ を使って)ベクタレイヤの入力フィールドを指定します:
##X=Field Layer
これでプロセシングは、Layer というフィールドが必要で、それを X と呼ぶことを知りました。
また、
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]])
プロセシングが提案するデフォルトのパス(processing/rscripts)にスクリプトを保存します。スクリプトの見出しに name
を定義していない場合、選択したファイル名がプロセシングツールボックスのスクリプトの名前となります。
注釈
スクリプトは好きな場所に保存できますが、その場合プロセシングでは自動的にプロセシングツールボックスに含めることができないので、手動でアップロードする必要があります。
今、エディタ・ウィンドウの上部にあるボタンを使用して、それを実行します。
エディタウィンドウを閉じたら、プロセシングのテキストボックスを使って、スクリプトを探します:
これで、プロセシングアルゴリズムウィンドウに必要なパラメータを入力することができます:
** Layer** に sample_points を選びます
X フィールドに value を選びます
[実行] をクリックしてください。
結果ウィンドウ が自動的に開くはずですが、そうでない場合は
をクリックするだけです。ビューアにあるリンクをクリックすると次が表示されます:
注釈
プロットで右クリックすることでその画像を開いたりコピーしたり保存することができます。
17.33.3. ベクタを作成する
また、ベクタレイヤを作成し、QGISに自動的に読み込ませることもできます。
以下の例は、Rスクリプトのオンラインコレクションにある Random sampling grid
スクリプトから引用したものです(このオンラインコレクションのスクリプトは https://github.com/qgis/QGIS-Processing/tree/master/rscripts で見ることができます)。
この演習の目的は、sp
パッケージの spsample
関数を使用して、範囲を制限する入力ベクタレイヤを使ってランダムポイントベクタレイヤを作成することです。
スクリプトのパラメーター
前と同じように、スクリプト本体の前にいくつかのパラメーターを設定する必要があります。
スクリプトを入れるグループ名(ここでは ポイントパターン解析)を指定します:
##Point pattern analysis=group
ランダムポイントの配置を制約する入力パラメータ(ベクタレイヤ)を定義します:
##Layer=vector
作成するポイントの数を入力パラメータで設定します(
Size
、デフォルト値は``10``):##Size=number 10
注釈
デフォルト値(
10
)が定義されているため、ユーザーはこの数値を変更するか数値のないパラメータのままにすることもできます。(
Output
と呼ばれる)出力ベクタレイヤがあることを指定します:##Output=output vector
スクリプト本体
今、関数の本体を追加できます。
spsample
関数を使います:pts=spsample(Layer, Size, type="random")
この関数は、Layer を使用して、点の配置を制約します(線レイヤの場合、点はレイヤ内のいずれかの線上にある必要があり、ポリゴンレイヤの場合、点はポリゴン内にある必要があります)。点の数は Size パラメータで指定します。サンプリング方法は、random です。
出力(``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))
保存し、実行ボタンをクリックして実行します。
新しいウィンドウで正しいパラメーターを入力し:
そして実行をクリックしてください。
結果レイヤが目次に追加され、そのポイントがマップキャンバスに表示されます:
17.33.4. Rからのテキスト・グラフ出力 - 文法
(``Processing R Provider plugin``を使った)プロセシング は、Rから結果を取り出すために特別な文法を使用します:
コマンドの前に
>
は、>lillie.test(Layer[[Field]])
中でのように、結果がR出力(結果ビューア)に送られるべきことを意味しますプロットの後に
+
を付けると、オーバーレイプロットを有効にします。例えば、plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))
です。