span8
span4
简介:开始与RCaller|下一个:RCaller:树的高度和树的宽度相关吗?
如果您需要执行更高级的统计比处于可用StatisticsCalculator互感器,牵引变压器使得FME更先进的统计分析成为可能。该RCaller为您提供了FME运行[R脚本的能力。
rcallerlinearregression.fmwt回归
rcallerlinearregressionwithgroups.fmwt
之前您可以使用RCaller您需要安装相应的R封装。参见节安装R解释器在FME用户文档。
在你获得与RCaller去那里的一对夫妇有用的东西要记住:
FME你变压器或特征类型连接到连接输入端口增加了新的端口连接到RCaller。新的输入端口将从源对象(即变压器名称或功能类型名称)继承了它的名字。
端口名称用作R中的数据框名称,因此重命名端口名称的东西,你就可以在你的[R脚本中使用。
FME加载数据到临时SQLite数据库,所以对于性能和清晰度,只选择你会在你的[R脚本中使用的属性。确保数据类型是正确的。
FME的数据为R传送作为A R数据帧。您可以通过拖动从数据帧中的菜单项访问你的[R脚本的数据帧或数据帧列:
因此,要访问的估计值的向量拖动数据 - 预计项目到脚本窗口,你会看到数据$估计在[R脚本窗口。
这不是的R教程。要了解更多关于R,请参阅参考资料部分在本文的结尾。如果你是新来的R,我建议你使用R控制台来开发和调试脚本 - 你会得到更好的反馈,这是一个比较容易看到的中间结果。然后复制并粘贴脚本到RCaller。逐步在R控制台构建脚本所以很明显,其中出现任何问题。您可以加载使用您的数据的样本R的读者:即:
数据= read.csv( “d:/tmp/SampleData.csv”)
#注意R使用UNIX的路径,即'/' 而不是 '\'。
...可能会非常棘手!RCaller经由被称为“fmeOutput”的数据帧将数据传递回FME。在数据帧中的每一行都将成为FME一个单独的输出特征。如果你知道如何建立并追加到R数据帧你也许可以跳过这一节。
要填充fmeOutput数据帧,可以简单地传回值的(长度为一的矢量)的列表,即:
>数据= read.csv( “d:/tmp/SampleData.csv”)> meanAct =平均(数据$实际)>最低劣=平均(数据$估计)> fmeOutput = data.frame(最低劣,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重新读取这些结果。文章RCaller:插值点转栅格通过克里格说明了如何做到这一点。
对于许多统计问题,你有一个定性的值,即。代码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 =实际x =估计(currentCode in unique(Data$Code)) {tmpData = Data[Data$Code == currentCode,] #线性回归为y = mx+k lm。linear = lm(tmpData$Actual ~ tmpData$Estimated) # linear model result vectors y = mx+k r2 = c(r2, summary(lm.linear)$r.squared) k = c(k, summary(lm.linear)$coefficients[1,1]) m = c(m, summary(lm.linear)$coefficients[2,1]) Code = c(Code, currentCode) } fmeOutput<-data.frame(Code, m, k, r2)
您可以将结果直接分配给一个数据帧,如果您能找到它的话,这样会更有效率。
工作区rcallerlinearregressionwithgroups.fmwt说明了上述示例。
调试R脚本
如果您对r比较陌生,那么我建议您首先在r控制台中开发脚本,然后转移到rcaller。在那里调试要容易得多,请参阅上面构建r脚本一节。如果遇到RCaller错误:
RCaller错误:在执行r脚本时退出代码为0。输出为:加载所需包:gsubfn加载所需包:proto加载所需包:rsqlite
如果脚本中存在语法错误或未定义的变量引用,这似乎是常见的错误响应,因此请仔细检查脚本中是否存在未分配的变量或拼写错误。
记住,像fme,r是区分大小写的。
以下是在fme中使用r的一些有用资源:
FME呼叫器文档
“R”教程:http://www.r-tutor.com/和在这里
使用summary()提取“summary”信息:例子
附加到数据帧例子
知识中心RCaller文章:
©2019安全亚搏在线软件公司|法律