17.33. 在处理中使用R脚本

由Matteo Ghetta贡献的模块-由 Scuola Superiore Sant'Anna

正在处理(使用 Processing R Provider 插件)使得在QGIS中编写和运行R脚本成为可能。

警告

R必须安装在您的计算机上,并且必须正确设置路径。而且处理只调用外部R包,不能安装它们。因此,请务必直接在R中安装外部包。请参阅相关 chapter 在用户手册中。

备注

如果你有 package 问题,可能与失踪有关 mandatory 处理所需的包裹,如 sprgdalraster

17.33.1. 添加脚本

添加脚本很简单。最简单的方法是打开处理工具箱,然后选择 Create new R script... 从加工工具箱顶部的R菜单(标有R图标)。您还可以在例如文本编辑器中创建脚本,并将其保存在R脚本文件夹中 (processing/rscripts )。保存到此处后,可通过右键单击处理工具箱中的脚本名称进行编辑,然后选择 Edit Script... )。

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

备注

如果在处理过程中看不到R,则必须在中激活它 Processing ► Options ► Providers

它会打开一个 script editor window 在添加脚本体之前,您必须在其中指定一些参数。

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

17.33.2. 创建地块

在本教程中,我们将创建一个 boxplot 向量层场的。

打开 r_intro.qgs 下的QGIS项目 exercise_data/processing/r_intro/ 文件夹。

脚本参数

打开编辑器,从开头开始编写。

must 指定一些参数 before 脚本正文:

  1. 组的名称 (plots 在本例中),您要在其中放置脚本(如果该组不存在,则会创建它)::

    ##plots=group
    

    您可以在 plots 处理工具箱中的R组。

  2. 您必须告诉处理程序您想要显示一个绘图(在本例中):

    ##showplots
    

    然后,您将找到指向该图的链接 Result Viewer 面板(可在中打开/关闭 View ► Panels 与.一起 Processing ► Results Viewer )。

  3. 您还需要告知处理您的输入数据。在本例中,我们希望从向量层的一个字段创建一个地块:

    ##Layer=vector
    

    处理现在知道输入是一个向量。名字 Layer 并不重要,重要的是 vector 参数。

  4. 最后,您必须指定向量层的输入字段(使用上面提供的名称- Layer ):

    ##X=Field Layer
    

    处理程序现在知道您需要一个字段 Layer ,你会把它叫做 X

  5. 也可以使用定义脚本的名称 name **

    ##My box plot script=name
    

    如果未定义,文件名将用作脚本的名称。

脚本体

现在您已经设置了 heading 在脚本中,您可以添加函数::

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

将脚本保存在处理建议的默认路径中(正在处理/r脚本)。如果您尚未定义 name 在脚本标题中,您选择的文件名将成为处理工具箱中的脚本的名称。

备注

您可以将脚本保存在您喜欢的任何位置,但处理将无法自动将其包括在处理工具箱中,因此您必须手动上载它。

现在只需使用编辑器窗口顶部的按钮运行它:

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

关闭编辑器窗口后,使用处理的文本框查找您的脚本:

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

您现在可以在处理算法窗口中填写所需的参数:

  • Layer 选择 sample_points

  • 对于 X 字段选择 value

点击 Run

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

这个 Result window 应该会自动打开,如果没有,只需点击 Processing ► Result Viewer...

点击查看器中的链接,您将看到:

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

备注

您可以通过右击绘图来打开、复制和保存图像。

17.33.3. 创建向量

您还可以创建向量层,并将其自动加载到QGIS中。

下面的示例摘自 Random sampling grid 可在R脚本的在线集合中找到的脚本(此在线集合中的脚本可在https://github.com/qgis/QGIS-Processing/tree/master/rscripts).中找到

本练习的目的是使用输入矢量图层创建随机点矢量图层,以使用 spsample 的功能 sp 包裹。

脚本参数

与前面一样,我们必须在脚本体之前设置一些参数:

  1. 在本例中,指定要放置脚本的组的名称 Point pattern analysis **

    ##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

保存并运行它,单击Run按钮。

在新窗口中,输入正确的参数:

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

然后点击Run(运行)。

结果图层将添加到内容列表中,其点将显示在地图画布上:

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

17.33.4. 从R-语法输出文本和图形

正在处理(使用 Processing R Provider plugin )使用特殊语法从R中获取结果:

  • > 在您的命令之前,如在 >lillie.test(Layer[[Field]]) 表示结果应发送到R输出(结果查看器)

  • + after a plot enables overlay plots. For example plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))