17.33. 在处理中使用R脚本
由Matteo Ghetta贡献的模块-由 Scuola Superiore Sant'Anna
正在处理(使用 Processing R Provider
插件)使得在QGIS中编写和运行R脚本成为可能。
警告
R必须安装在您的计算机上,并且必须正确设置路径。而且处理只调用外部R包,不能安装它们。因此,请务必直接在R中安装外部包。请参阅相关 chapter 在用户手册中。
备注
如果你有 package 问题,可能与失踪有关 mandatory 处理所需的包裹,如 sp
, rgdal
和 raster
。
17.33.1. 添加脚本
添加脚本很简单。最简单的方法是打开处理工具箱,然后选择 processing/rscripts
)。保存到此处后,可通过右键单击处理工具箱中的脚本名称进行编辑,然后选择 )。

备注
如果在处理过程中看不到R,则必须在中激活它
它会打开一个 script editor window 在添加脚本体之前,您必须在其中指定一些参数。

17.33.2. 创建地块
在本教程中,我们将创建一个 boxplot 向量层场的。
打开 r_intro.qgs
下的QGIS项目 exercise_data/processing/r_intro/
文件夹。
脚本参数
打开编辑器,从开头开始编写。
你 must 指定一些参数 before 脚本正文:
组的名称 (plots 在本例中),您要在其中放置脚本(如果该组不存在,则会创建它)::
##plots=group
您可以在 plots 处理工具箱中的R组。
您必须告诉处理程序您想要显示一个绘图(在本例中):
##showplots
然后,您将找到指向该图的链接 Result Viewer 面板(可在中打开/关闭
与.一起 )。您还需要告知处理您的输入数据。在本例中,我们希望从向量层的一个字段创建一个地块:
##Layer=vector
处理现在知道输入是一个向量。名字 Layer 并不重要,重要的是 vector 参数。
最后,您必须指定向量层的输入字段(使用上面提供的名称- Layer ):
##X=Field Layer
处理程序现在知道您需要一个字段 Layer ,你会把它叫做 X 。
也可以使用定义脚本的名称
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]])

将脚本保存在处理建议的默认路径中(正在处理/r脚本)。如果您尚未定义 name
在脚本标题中,您选择的文件名将成为处理工具箱中的脚本的名称。
备注
您可以将脚本保存在您喜欢的任何位置,但处理将无法自动将其包括在处理工具箱中,因此您必须手动上载它。
现在只需使用编辑器窗口顶部的按钮运行它:

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

您现在可以在处理算法窗口中填写所需的参数:
为 Layer 选择 sample_points
对于 X 字段选择 value
点击 Run 。

这个 Result window 应该会自动打开,如果没有,只需点击
。点击查看器中的链接,您将看到:

备注
您可以通过右击绘图来打开、复制和保存图像。
17.33.3. 创建向量
您还可以创建向量层,并将其自动加载到QGIS中。
下面的示例摘自 Random sampling grid
可在R脚本的在线集合中找到的脚本(此在线集合中的脚本可在https://github.com/qgis/QGIS-Processing/tree/master/rscripts).中找到
本练习的目的是使用输入矢量图层创建随机点矢量图层,以使用 spsample
的功能 sp
包裹。
脚本参数
与前面一样,我们必须在脚本体之前设置一些参数:
在本例中,指定要放置脚本的组的名称 Point pattern analysis **
##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))

保存并运行它,单击Run按钮。
在新窗口中,输入正确的参数:

然后点击Run(运行)。
结果图层将添加到内容列表中,其点将显示在地图画布上:

17.33.4. 从R-语法输出文本和图形
正在处理(使用 Processing R Provider plugin
)使用特殊语法从R中获取结果:
>
在您的命令之前,如在>lillie.test(Layer[[Field]])
表示结果应发送到R输出(结果查看器)+
after a plot enables overlay plots. For exampleplot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))