Important
翻译是一项社区工作 you can join。此页面目前翻译进度为 100.00%。
17.33. 在处理(Processing)中使用 R 脚本
模块由Matteo Ghetta贡献,由 Scuola Superiore Sant'Anna 资助
通过 Processing R Provider 插件,Processing 可以在 QGIS 中编写并运行 R 脚本。
Warning
R 必须已安装在您的计算机上,并且 PATH 必须正确设置。此外,Processing 仅调用外部 R 包,无法自行安装它们。因此,请确保直接在 R 中安装所需的外部包。参见用户手册中的相关 章节。
Note
如果您遇到 package 问题,可能是由于缺少 Processing 所需的*必备*包,例如 sp、rgdal 和 raster。
17.33.1. 添加脚本
添加脚本很简单。最简单的方法是打开 Processing 工具箱,从工具箱顶部的 R 菜单(标有 R 图标)中选择 。您也可以在例如文本编辑器中创建脚本,并将其保存到您的 R 脚本文件夹(processing/rscripts)中。保存后,右键单击 Processing 工具箱中的脚本名称,然后选择 即可进行编辑。
Note
如果在 Processing 中看不到 R,请在 中激活它
它将打开一个*脚本编辑器窗口*,您必须先指定一些参数,然后才能添加脚本主体。
17.33.2. 创建图表
在本教程中,我们将创建一个矢量图层字段的**箱线图(boxplot)**。
打开 exercise_data/processing/r_intro/ 文件夹下的 r_intro.qgs QGIS 工程。
脚本参数
打开编辑器并在其开头开始编写。
您**必须**在脚本主体**之前**指定一些参数:
您希望将脚本放入的组名称(本例中为 plots)(如果该组不存在,将自动创建)::
##plots=group您将在 Processing 工具箱的 plots R 组中找到您的脚本。
您需要告知 Processing 您希望显示一个图表(本例中)::
##showplots随后您将在 Result Viewer 面板中找到指向该图表的链接(可通过 和 开启或关闭该面板)。
您还需要告知 Processing 您的输入数据。在本例中,我们希望从矢量图层的一个字段创建图表::
##Layer=vectorProcessing 现在知道输入的是一个矢量。名称 Layer 并不重要,重要的是 vector 参数。
最后,您需要指定矢量图层的输入字段(使用上面提供的名称——Layer)::
##X=Field LayerProcessing 现在知道您需要 Layer 的一个字段,并且您将它命名为 X。
您也可以使用
name来定义脚本的名称::##My box plot script=name如果未定义,将使用文件名作为脚本名称。
脚本主体
现在您已经设置好了脚本的*头部*,可以添加函数了::
boxplot(Layer[[X]])
boxplot 是 R 函数的名称,参数 Layer 是您为输入数据集定义的名称,X 是您为该数据集字段定义的名称。
Warning
参数 X 必须用双层方括号([[]])括起来。
最终脚本如下所示::
##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
将脚本保存在 Processing 建议的默认路径(processing/rscripts)中。如果您未在脚本头部定义 name,则您所选的文件名将成为 Processing 工具箱中的脚本名称。
Note
您可以将脚本保存在任意位置,但 Processing 将无法自动将其纳入处理工具箱,因此您必须手动上传。
现在只需点击编辑器窗口顶部的按钮即可运行它:
关闭编辑器窗口后,使用 Processing 的文本框查找您的脚本:
现在您可以在 Processing 算法窗口中填写所需的参数:
对于 Layer,选择 sample_points
对于 X 字段,选择 value
点击 Run。
Result window 应自动打开,如果没有,请点击 。
点击查看器中的链接,您将看到:
Note
您可以通过右键单击图表来打开、复制和保存图像。
17.33.3. 创建矢量
您还可以创建一个矢量图层并使其自动加载到 QGIS 中。
下面的示例取自 Random sampling grid (随机抽样网格)脚本,该脚本可以在R脚本的在线集合中找到(该在线集合中的脚本可以在https://github.com/qgis/QGIS-Processing/tree/master/rscripts中找到)。
本练习的目标是使用输入的矢量图层限制范围,通过 sp 包中的 spsample 函数创建一个随机点矢量图层。
脚本参数
与之前一样,我们需要在脚本主体之前设置一些参数:
指定您希望将脚本放入的组名,本例中为 Point pattern analysis::
##Point pattern analysis=group定义一个输入参数(矢量图层),用于限制随机点的放置位置::
##Layer=vector设置一个输入参数,用于指定将要创建的点数(
Size,默认值为10)::##Size=number 10Note
由于已定义默认值(
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))
保存并点击运行按钮执行它。
在新窗口中输入正确的参数:
然后点击 run。
结果图层将添加到图层面板中,其点将显示在地图画布上:
17.33.4. R 的文本与图形输出——语法
Processing(通过 Processing R Provider 插件)使用特殊语法从 R 中获取结果:
命令前的
>``(如 ``>lillie.test(Layer[[Field]]))表示结果应发送至 R 输出(结果查看器)图表后的
+允许叠加绘图。例如plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))