span8
span4
简介:RCaller入门γ下一步:RCALLER:树高和树宽是否相关?
如果需要执行比在统计计算器变压器,牵引变压器使FME中更高级的统计分析成为可能。RCaller使您能够在FME中运行R脚本。
rcallerlinearregression.fmwt回归
rcallerlinearregressionwithgroups.fmwt
在使用RCaller之前,需要安装适当的R包。参见关于安装R解释器在FME用户文档中。
在你开始与RCaller交谈之前,有一些有用的事情要记住:
当您将转换器或特性类型连接到连接输入端口时,FME将向RCaller添加新端口。新的输入端口将从源对象(i。e转换器名称或功能类型名称)。
端口名在R中用作数据帧名,因此将端口名重命名为能够在R脚本中使用的名称。
FME将您的数据加载到一个临时的SQLite数据库中,因此对于性能和清晰度,只选择您将在R脚本中使用的属性。确保数据类型正确。
FME将数据以R的形式传输到R中数据帧。你可以通过从数据帧菜单中拖动项目来访问R脚本中的数据帧或数据帧列:
因此,要访问估计值向量,请将Data - Estimated项拖到脚本窗口中,您将在R脚本窗口中看到Data$Estimated。
这不是R教程。要了解更多关于R的信息,请参阅本文末尾的参考资料部分。如果您刚接触R,我建议您使用R控制台来开发和调试脚本—您将得到更好的反馈,并且更容易看到中间结果。然后将脚本复制并粘贴到RCaller中。在R控制台中增量地构建脚本,这样就可以清楚地看到哪里出现了问题。方法加载数据的样本读卡器:即。:
Data = read.csv (“D: / tmp / SampleData.csv”)
#笔记R使用UNIX路径,即“/”而不是“\”。
…可能会非常棘手!RCaller通过一个名为“fmeOutput”的数据帧将数据传回FME。在FME中,数据帧中的每一行都将成为一个单独的输出特性。如果您知道如何构建和附加到R数据帧,您可能会跳过这一部分。
要填充fmeOutput数据帧,只需返回一个值列表(长度为1的向量),即:
> Data = read.csv("D:/tmp/SampleData.csv") > mean act = mean(Data$Actual) > mean est = mean(Data$Estimated) > fmeOutput = Data. frame(mean est, meanAct)
但许多r函数返回的结果更为复杂。例如,求解y=mx+k的线性回归函数:
lm.linear<-lm(数据$actual~数据$estimated)
使用r摘要()查看结果的函数:
>汇总(lm.线性)调用:lm(公式=数据$实际~数据$估计)残差:最小1q中值3q最大-9.9667-2.1022 0.2679 2.3813 8.3354系数:估计标准误差t值p r(>t)(截距)12.051001 9.149612 1.317 0.211数据$Estimated-0.009291 0.861531-0.011 0.992剩余标准误差:5.045 13自由度多r平方:8.946e-06,调整r平方:-0.07691 f-统计:0.0001163 1和13 df,p-值:0.9916
怎么把它放回FME?
这个名称()函数将返回摘要中的变量名,即:
>名称(摘要(lm.linear))[1]“调用”“terms”“residuals”“系数”“别名”[6]“sigma”“df”“r.squared”“adj.r.squared”“fstatistic”[11]“cov.unscaled”
但是…其中一些本身是更复杂的对象,如“系数”:
>总结(lm.线性)$系数估算标准错误t值pr(>t)(截距)12.051001492 9.1496116 1.31710525 0.2105480数据$Estimated-0.009291111 0.8615308-0.01078442 0.9915592
那么如果你想返回到fme,y=mx+k分析的共同特征,比如r平方值,m&k,怎么办?
您必须选择所需的值并将其传递给fmeoutput数据帧。在上面的例子中,m由数据给出,$估计值=-0.009291111,k(y截距)由(截距)估计值=12.051001492给出,r平方的结果是简单值:r平方。所以你可以使用:
k<-汇总(lm.linear)$系数[1,1](第一行第一列)m<-汇总(lm.linear)$系数[2,1](第一行第二列)r2<-汇总(lm.linear)$r.squared
那很容易!
工作区rcallerlinearregression.fmwt回归说明了上述示例。
最后一个提示:在RCaller中公开结果变量,以使Workbench中的生活更轻松:
在某些情况下,可能不适合对r结果使用数据帧,即对大型光栅或图像使用数据帧。在这种情况下,您可以将您的r结果导出到一个临时数据文件中,并让fme重新读取这些结果。文章通过克里格插值点到栅格说明了如何做到这一点。
对于许多统计问题,你有一个定性的值,即。代码abc和txu,与数量值有一定关系。所以简单的分组很有意义。
例如,您可能需要计算每个代码值的平均值:
日期代码预计实际日期2016年11月29日TXU 46.14 59.5 2016年11月28日ABD 43.89 34.1 2016年11月27日TXU 42.15 25.8 2016年11月27日ABC 9.3 20.3 2016年11月26日ABD 42.15 50.6 2016年11月25日ABC 11.04 11.7
您可以将分析置于循环中,通过代码对数据进行采样,然后计算回归。类似于:
for(currentcode in unique(data$code)){假设输入data.frame是'data'tmpdata=data[data$code==currentcode,]lm=lm(tmpdata$actual~tmpdata$estimated)y=mx+k}上的线性模型
#初始化向量以保存结果r2<-c()m<-c()k<-c()code<-character()y=actual x=estimated for(currentcode in unique(data$code)){tmpdata=data[data$code==currentcode,]y=mx+k lm.linear=lm(tmpdata$actual~tmpdata$estimated)的线性回归线性模型结果向量y=mx+k r2=c(r2,摘要(lm.linear)$r.squared)k=c(k,摘要(lm.linear)$系数[1,1])m=c(m,摘要(lm.linear)$系数[2,1])code=c(code,currentcode)}fmeoutput<-data.frame(code,m,k,r2)
您可以将结果直接分配给一个数据帧,如果您能找到它的话,这样会更有效率。
工作区rcallerlinearregressionwithgroups.fmwt说明了上述示例。
调试r脚本
如果您对r比较陌生,那么我建议您首先在r控制台中开发脚本,然后转移到rcaller。在那里调试要容易得多,请参阅上面构建r脚本一节。如果遇到RCaller错误:
错误RCaller(InLimeRealStudio):执行R脚本时,退出代码1失败。输出为:加载所需包:gsubfn加载所需包:proto加载所需包:rsqlite
如果脚本中存在语法错误或未定义的变量引用,这似乎是常见的错误响应,因此请仔细检查脚本中是否存在未分配的变量或拼写错误。
记住,像fme,r是区分大小写的。
以下是在fme中使用r的一些有用资源:
FME呼叫器文档
“R”教程:http://www.r-tutor.com/和在这里
使用summary()提取“summary”信息:这里的例子
附加到数据帧实例
知识中心RCaller文章:
©2019安全亚搏在线软件公司法律